如何在JSF应用程序中下载文件?

时间:2012-07-11 16:34:16

标签: jsf-2

我在JSF2网络应用程序中遇到“下载文件”功能有困难。下载文件有效(即出现保存对话框并在本地保存文件)。但是,之后,我的网络应用程序不再响应(即不响应按钮点击)。我猜,我已“失去”了回应。

据我所知,下面的解决方案是相当标准的,但它对我不起作用。我想避免使用下载servlet,但这是处理动态文件的更好方法,所以就这样吧。

有人有任何想法如何解决吗?

下面是相关的代码片段,我的所有文件都是在托管bean的操作方法中动态创建的。创建的文件主要是office文档和PDF。我在我当地的Win7机器上使用WLS进行测试。

在我的JSF页面上:

<h:commandButton    
      id="downloadBtn"    
      immediate="true"    
      value="Download"    
      action="#{myBean.downloadFile}"/>

我的bean操作方法(对于Excel文件):

public void downloadFile() {    
    byte[] bytes = generateDocument();    
    String fileName = getFilename();    

    FacesContext faces = FacesContext.getCurrentInstance();    
    HttpServletResponse response = (HttpServletResponse) faces.getExternalContext().getResponse();    
    response.reset();    
    response.setContentType(MimeTypeEnum.MIME_TYPE_EXCEL);    
    response.setContentLength(bytes.length);    
    response.setHeader("Content-disposition", "attachment; filename=\"" + fileName + "\"");    

    BufferedOutputStream out = null;   

    try {        
        out = new BufferedOutputStream(response.getOutputStream());        
        out.write(bytes);        
        out.flush();    
    } 
    catch (IOException e) {      
        throw new TechnicalException("Error writing response", e);    
    } 
    finally {        
        close(out); // Gently close stream.    
    }    

    faces.responseComplete();}
}

0 个答案:

没有答案