2013-08-29 29 views
1

我试着去实现通过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()}" 

谢谢!

+0

response.setHeader( “内容处置”,“附件;文件名= \ “”+ name +“\”“); //添加一个=符号就是诀窍! – chienlou

回答

2

你似乎缺少一个=,我认为这将是正确的:

response.setHeader("Content-Disposition", "attachment;filename=\"" + name + "\""); 

或只是

response.setHeader("Content-Disposition", "attachment;filename=" + name); 
+0

非常感谢!你是对的我设法搞砸了复制粘贴:/ – chienlou