【问题标题】:Exporting PDF on JSF doesn't export在 JSF 上导出 PDF 不会导出
【发布时间】:2017-06-12 02:43:04
【问题描述】:

当我尝试将数据表信息导出到 PDF 时遇到了这个问题,该方法完成了所有操作,但它不下载 PDF 甚至不生成。

Netbeans 版本:8.2

JSF:2.2

Primefaces:5.3

Libraries used:
Jasperreports 6.3
poi 3.14
commons-beanutils-1.9.0
commons-collection-3.2.2
commons-digester-2.1
commons-logging-1.1.1
groovy-all-2.4.0
itext-2.1.7.js5
jaxp-ri
jcommon-1.0.23
jfreechart-1.0.19

而我的方法是:

public void exportpdf(OrdenRetiro or) throws JRException, IOException {
    conexion con = new conexion();
    Map<String, Object> parametros = new HashMap<String, Object>();
    FacesContext context = FacesContext.getCurrentInstance();
    ServletContext servleContext = (ServletContext) context.getExternalContext().getContext();
    parametros.put("RutaImagen", servleContext.getRealPath("/reportes/"));
    parametros.put("cod_ordenretiro", or.getCod_ordenretiro());
    
    String temperatura = or.getEs_temperado()==1?"ReporteFreezer.jasper":"ReporteNoFreezer.jasper";
    
    String dirReporte = servleContext.getRealPath("/reportes/"+temperatura);
    HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
    response.addHeader("Content-disposition", "attachment;filename=Orden de Retiro"+or.getCod_ordenretiro()+".pdf");
    response.setContentType("application/pdf");

    JasperPrint impres = JasperFillManager.fillReport(dirReporte, parametros, con.getConnection());
    JasperExportManager.exportReportToPdfStream(impres, response.getOutputStream());
    context.responseComplete();            
}

有什么想法吗?

【问题讨论】:

  • 您是否尝试使用简单测试生成报告(导出到文件)?
  • 我已经有其他项目结构相同并且可以导出,你的意思是直接下载文件夹中的文件?
  • 您可以创建一个简单的控制台应用程序来检查与导出报告相关的部分代码为pdf(使用JasperReports API)。
  • 请始终、始终、始终发布minimal reproducible example。您的问题看不到哪里出了问题。

标签: jsf jasper-reports


【解决方案1】:

找到解决方案。

当方法有效但不导出时是因为 xhtml 上的 ajax。经过一番研究得到了答案here

我提出了正确的报价。

第一个问题是&lt;p:commandLink&gt;默认发送一个Ajax 要求。此请求由 JavaScript 代码触发。然而,JavaScript 无法对包含文件下载的响应做任何事情。到期的 到安全限制 JavaScript 不能产生另存为对话框或 某物。响应基本上完全被忽略了。

您需要将 ajax="false" 添加到 &lt;p:commandLink&gt; 以关闭 ajax 所以 该按钮触发一个正常的同步 HTTP 请求,或者您需要 用标准&lt;h:commandButton&gt;替换它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    相关资源
    最近更新 更多