Jsf 下载Jasper报告,而不是在浏览器中打开

Jsf 下载Jasper报告,而不是在浏览器中打开,jsf,jasper-reports,Jsf,Jasper Reports,我使用的是PrimeFaces5.1和JSF2.2 下面是我的代码:我正在从TableModelDate方法生成PDF文件,所有这些方法都可以正常工作。但是它正在我的浏览器中打开,我怎么能不打开就下载它呢 public void PDF() throws JRException, IOException { HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext.getCurrentInst

我使用的是PrimeFaces5.1和JSF2.2

下面是我的代码:我正在从
TableModelDate
方法生成
PDF
文件,所有这些方法都可以正常工作。但是它正在我的浏览器中打开,我怎么能不打开就下载它呢

public void PDF() throws JRException, IOException {
    HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
    simpleReport();
    httpServletResponse.addHeader("Content-disposition", "filename=report.pdf");
    ServletOutputStream servletOutputStream = httpServletResponse.getOutputStream();
    JasperExportManager.exportReportToPdfStream(jasperPrint,servletOutputStream);
    FacesContext.getCurrentInstance().responseComplete();
}

public void simpleReport() {
    TableModelData();
    try {
        String reportPath = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/reports/");
        JasperCompileManager.compileReportToFile(reportPath+"/Report.jrxml");
        jasperPrint = JasperFillManager.fillReport(reportPath+"/Report.jasper", new HashMap(),new JRTableModelDataSource(tableModel));
    } catch (JRException ex) {
        ex.printStackTrace();
    }
}

你离它很近

只需添加
附件带有
文件名=xx.pdf的语句
比如:

它告诉Http Servlet Responce文件包含的是附件

额外:

每当浏览器打开
PDF
format时,它也会显示保存选项,您也可以在浏览器中打开(加载)后将其保存

httpServletResponse.addHeader("Content-disposition", "attachment; filename=report.pdf");