我试着去实现通过JSF相同的下载文件,如那些职位描述: JSF2 download file returns xhtml page source How to provide a file download from a JSF backing bean? http://bharatonjava.wordpress.com/2013/02/01/downloading-file-in-jsf-2/ http://prabinhada.blogspot.com/2012/06/how-to-download-file-using-jsf.htmlJSF下载文件的回报index.jsf
我的问题是,我居然可以下载文件,但它的名字是错误的(以浏览器为准)。 这是一个XML文件,我在马歇尔的下载方法,但浏览器总是收到一个文件index.jsf(但MIME类型设置为文本/ XML和文件大小正确)
它运行在:
- 钻嘴鱼科2.1.7
- RichFaces的4.3.3.Final
- jboss-7.1.1.Final
请参考下面,如果你发现任何问题
public void exportEDL() throws Exception {
String name = this.file.getName();
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
BufferedOutputStream output = null;
StringWriter sw = null;
try {
...
sw = new StringWriter();
// edl is the jaxb i want to return as xml file
marshaller.marshal(this.edl, sw);
// Init servlet response.
response.reset();
response.setBufferSize(DEFAULT_BUFFER_SIZE);
response.setContentType("text/xml");
response.setContentLength(sw.getBuffer().length());
response.setHeader("Content-Disposition", "attachment;filename\"" + name + "\"");
output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE);
output.write(sw.toString().getBytes("UTF-8"));
// Finalize task.
sw.flush();
output.flush();
} catch (Exception e) {
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, null, e.getMessage());
facesContext.addMessage("Error", msg);
return;
} finally {
// Gently close streams.
IOUtil.close(sw);
IOUtil.close(output);
clearUploadData();
}
// Inform JSF that it doesn't need to handle response.
facesContext.responseComplete();
// facesContext.renderResponse();
// facesContext.release();
}
我试着用别的东西比XML编组没有更好的结果。 你们有没有设法下载带有正确名称+扩展名的文件?
这是在视图中一个命令:
<h:commandButton action="#{fileUploadBean.exportEDL()}"
谢谢!
response.setHeader( “内容处置”,“附件;文件名= \ “”+ name +“\”“); //添加一个=符号就是诀窍! – chienlou