2011-05-21 26 views
2

我試圖用按鈕單擊時使用JasperReport生成一個簡單的PDF報告。下面是相關的代碼:報告下載不提示用戶保存

report.xhtml:

<p:commandButton value="#{msg['report.generate']}" action="#{generateReportBean.generateReport}" />

GenerateReportBean.java:

public void generateReport() throws JRException, IOException { 
    FacesContext facesContext = FacesContext.getCurrentInstance(); 
    ExternalContext externalContext = facesContext.getExternalContext(); 
    HttpServletResponse response = (HttpServletResponse) externalContext 
      .getResponse(); 

    InputStream reportStream = facesContext.getExternalContext().getResourceAsStream("/WEB-INF/reports/report.jrxml"); 
    JasperDesign jasperDesign = JRXmlLoader.load(reportStream); 
    JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign); 
    byte[] report = JasperRunManager.runReportToPdf(jasperReport, new HashMap(), new JREmptyDataSource()); 

    response.setContentType("application/pdf"); 
    response.setContentLength(report.length); 
    response.setHeader("Content-disposition", "attachment; filename=report.pdf"); 

    ServletOutputStream servletOutputStream = response.getOutputStream(); 
    servletOutputStream.write(report); 
    servletOutputStream.flush(); 
    servletOutputStream.close(); 
    facesContext.responseComplete(); 

} 

的問題是,當我使用Firebug我可以看到一個響應(對我來說這好的):

X-Powered-By JSF/2.0 
Content-Type application/pdf 
Content-Length 1310 
Content-Disposition attachment; filename=report.pdf 
Server Jetty(7.4.0.v20110414) 

但是我沒有看到彈出窗口請求我保存pdf。正如你所看到的,我正在開發Jetty 7.4 maven插件。我在這裏做錯了什麼?

回答

5

添加Ajax = 「假」 到你的commandButton

<p:commandButton ajax="false" value="#{msg['report.generate']}" action="#{generateReportBean.generateReport}" />