在JSF上导出PDF不会导出

时间:2017-01-26 15:14:18

标签: jsf jasper-reports

当我尝试将数据表信息导出为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();            
}

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

得到了解决方案。

当方法有效但不导出是因为xhtml上的ajax。做了一些研究后得到了答案here

我做了一些引用。

  

第一个问题是<p:commandLink>默认发送一个Ajax   请求。此请求由JavaScript代码触发。但是,JavaScript   对包含文件下载的响应无法执行任何操作。应有   安全限制JavaScript无法生成“另存为”对话框或   一些东西。反应基本上完全被忽略了。

     

您需要将ajax="false"添加到<p:commandLink>以关闭ajax   该按钮触发正常的同步HTTP请求,或者您需要   用标准<h:commandButton>

替换它