哪个是使用JSF下载文件的正确方法?只是放一个文件链接?在那种情况下我如何获得文件URL?
我见过一个使用BufferedInputStream的例子:
http://www.winstonprakash.com/articles/jsf/file_download_link.htm
有什么区别?
谢谢
我已经创建了一个JSF应用程序,我想在一个页面中嵌入一个链接,当点击它时会导致支持bean编组一些xml并强制打开另存为下载对话框,以便用户可以选择一个位置保存文件.我已经编写了JAXB代码.
这是怎么做到的?
谢谢
我一直在研究CRUD应用程序,我需要将数据从数据库导出到csv文件.为了导出,我必须以下面的代码所示的方式禁用ajax:
<p:commandButton value="Export" ajax="false" action="myController.export"/>
Run Code Online (Sandbox Code Playgroud)
在调用的方法中,我创建文件并通过OmniFaces实用程序方法下载它:
Faces.sendFile(file, true);
Run Code Online (Sandbox Code Playgroud)
使用相同的方法,我检查是否确实存在任何数据,如果没有任何数据,则会显示警告对话框:
RequestContext.getCurrentInstance().showMessageInDialog(new FacesMessage(FacesMessage.SEVERITY_WARN, "Warning!", "No available data for export."));
Run Code Online (Sandbox Code Playgroud)
现在,虽然所有这些都按预期工作,但问题是因为禁用了ajax,所以无法动态显示对话框,并重新加载页面.如果启用了ajax,则会动态显示对话框,但不会启动文件下载.
我一直在努力解决这个问题,使用Monitor下载,或强制点击第二个按钮,但到目前为止,我还没有在这个问题上取得任何进展.
是否有任何普遍接受的方式来解决像这样的问题?
我想导出a <rich:dataTable>
或<rich:extendedDataTable>
excel 的内容.
我看到PrimeFaces有"出口商特色" http://www.primefaces.org/showcase/ui/exporter.jsf
我希望只能使用PrimeFaces做类似的事情,但是使用richFaces(版本3.3.3)......(我想在未来的某个时候迁移到RichFaces 4但是我坚持使用3.3 .3现在)
我已经读过可以使用http://poi.apache.org/构建自己的, 但我不知道从哪里开始实现这样的东西......
任何关于如何最好地预先形成所需出口和示例的想法将不胜感激!
我觉得这将是一个最短的答案将是一个问题:"这就是为什么JSF取代了JSP",但我会继续问问题.
问题:我想知道:我可以获取JSF页面的Response对象(如果有的话)?
为何奇怪?:我发现自己处于需要从JSF页面传递到JSP的情况,所以我想为什么不response.sendRedirect
从一个从JSF页面调用的bean 重定向(with )然后......你可以看到它的标题.
我觉得这样可以用更干净的方式完成,但看不出怎么样!
编辑:在它上面,我还会询问哪种方式最适合重定向到JSF页面.
提前感谢您的建议.
我们正在按照SO问题中详细说明的程序如何从JSF支持bean提供文件下载,将二进制文件流式传输给我们的用户?
通常,工作流程按预期工作,但在生成导出文件期间,可能会发生可恢复的错误,我们希望将这些错误显示给用户.在这种情况下,仍然会生成文件本身.所以我们希望继续导出并显示面部消息.
只是强调这一点:是的,数据有些不合适,但我们的用户希望导出继续并接收有缺陷的文件.然后他们想查看该文件,联系他们的供应商并向他发送有关该漏洞的消息.
所以无论如何我都需要导出才能完成.
但它并没有像我们想要的那样成功.我创建了一个简化的例子来说明我们的方法.
作为替代方案,我们正在考虑一个Bean,它将保存消息并在导出后显示它们.但是可能有一种方法可以使用JSF内置机制来实现这一目标.
调节器
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import org.apache.tomcat.util.http.fileupload.util.Streams;
@ManagedBean
@RequestScoped
public class ExportController {
public void export() {
FacesContext fc = FacesContext.getCurrentInstance();
ExternalContext ec = fc.getExternalContext();
byte[] exportContent = "Hy Buddys, thanks for the help!".getBytes();
// here something bad happens that the user should know about
// but this message does not go out to the …
Run Code Online (Sandbox Code Playgroud) 我不知道如何下载CSV文件.CSV将在运行时生成.我是否需要先将文件保存在tomcat WEB-INF目录中?我正在使用JSF 1.2.
顺便说一下,这种任务最受欢迎的JSF组件是什么?
编辑(05.05.2012 - 15:53)
我尝试了BalusC
他的第一个链接中说明的解决方案,但如果我点击我的commandButton,该文件的内容将显示在网页上.也许这有问题mimetype
?
XHTML文件:
<a4j:form>
<a4j:commandButton action="#{surveyEvaluationBean.doDataExport}" value="#{msg.srvExportButton}" />
</a4j:form>
Run Code Online (Sandbox Code Playgroud)
主豆:
public String doDataExport() {
try {
export.downloadFile();
} catch (SurveyException e) {
hasErrors = true;
}
return "";
}
Run Code Online (Sandbox Code Playgroud)
出口豆类:
public void downloadFile() throws SurveyException {
try {
String filename = "analysis.csv";
FacesContext fc = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) fc.getExternalContext().getResponse();
response.reset();
response.setContentType("text/comma-separated-values");
response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
OutputStream output = response.getOutputStream();
// writing just sample …
Run Code Online (Sandbox Code Playgroud) 我想使用<h:form>
组件向另一台服务器发送HTTP post请求.
我可以使用HTML <form>
组件向外部站点发送POST请求,但<h:form>
组件不支持此操作.
<form action="http://www.test.ge/get" method="post">
<input type="text" name="name" value="test"/>
<input type="submit" value="CALL"/>
</form>
Run Code Online (Sandbox Code Playgroud)
我怎样才能实现这一目标<h:form>
?
我想从Rich Faces数据表中导出数据我已经从数据表中的数据创建了outputStream.现在想要将此OutputStream发送到浏览器并让它保存.我怎样才能做到这一点?
FileOutputStream stream = new FileOutputStream(new File(PATH));
OutputStream out = myMthodToCreateOutPutStream();
现在如何将此保存out
到浏览器.
您好我正在使用JSF和Primefaces上传和下载相同的文件操作.
我正在使用来自不同论坛和博客的技术(BelusC的博客和Primefaces Showcase).
此操作的主要思想是让用户上传文件并为上传的文件生成下载链接,以便他可以在提交前下载并查看.
这是我的代码:
的index.xhtml
<h:form>
<p:fileUpload showButtons="false" label="Attach Refrral"
auto="true" fileUploadListener="#{fileBean.uploadListener}"/>
</h:form>
<h:form >
<p:commandLink>
See Uploaded File
<p:fileDownload value="#{fileBean.refrralFile}"/>
</p:commandLink>
</h:form>
Run Code Online (Sandbox Code Playgroud)
FileBean.java
private StreamedContent refrralFile;
public void uploadListener(FileUploadEvent evt)throws Exception
{
UploadedFile fx = evt.getFile();
File mainDir = new File("C:/","fileStorage");
if(!mainDir.exists())
{
mainDir.mkdir();
}
File subDir = new File(mainDir,"AttachedRefrrals");
if(!subDir.exists())
{
subDir.mkdir();
}
String fileName = fx.getFileName();
File f = new File(subDir,fileName);
FileOutputStream fos = new FileOutputStream(f);
IOUtils.copy(fx.getInputstream(), fos);
InputStream is = ((ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext()).getResourceAsStream(f.getAbsolutePath());
refrralFile = new DefaultStreamedContent(is, …
Run Code Online (Sandbox Code Playgroud) jsf ×10
download ×5
java ×4
primefaces ×3
richfaces ×2
ajax ×1
apache-poi ×1
csv ×1
excel ×1
jsf-2 ×1
jsp ×1
message ×1
validation ×1