当我尝试将数据表信息导出为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();
}
有什么想法吗?
答案 0 :(得分:1)
得到了解决方案。
当方法有效但不导出是因为xhtml上的ajax。做了一些研究后得到了答案here
我做了一些引用。
第一个问题是
<p:commandLink>
默认发送一个Ajax 请求。此请求由JavaScript代码触发。但是,JavaScript 对包含文件下载的响应无法执行任何操作。应有 安全限制JavaScript无法生成“另存为”对话框或 一些东西。反应基本上完全被忽略了。您需要将
替换它ajax="false"
添加到<p:commandLink>
以关闭ajax 该按钮触发正常的同步HTTP请求,或者您需要 用标准<h:commandButton>