Java Primefaces中的Jasper报表集成
我正在发布一个代码片段,它在其他表单上运行良好,可以将Jasperreport打印为Pdf格式Java Primefaces中的Jasper报表集成,java,jsf,primefaces,jasper-reports,Java,Jsf,Primefaces,Jasper Reports,我正在发布一个代码片段,它在其他表单上运行良好,可以将Jasperreport打印为Pdf格式 <p:commandButton id="cmdPrint" value="Print" actionListener="#{receiptMB.print()}" disabled="#{receiptMB.chkSave == false}" process="@this" /> 上面的代码在其他表单上运行良好,但在特定的对话框表单中不起作用。它没有给出错误,但也没有
<p:commandButton id="cmdPrint" value="Print"
actionListener="#{receiptMB.print()}"
disabled="#{receiptMB.chkSave == false}" process="@this" />
上面的代码在其他表单上运行良好,但在特定的对话框表单中不起作用。它没有给出错误,但也没有给出任何输出。
我提出了一些解决方案,但没有工作。不应该使用ajax请求来生成输出。在命令按钮上设置
ajax=“false”
,我将尝试并报告。设置“ajax=“false””没有调用打印方法。那么肯定是其他错误(在禁用的属性和一般转换/验证错误之间)。使用非ajax命令按钮不是可选的。看到这个答案了吗?我添加了immediate=“true”,它起作用了。
public void print(){
try
{
JRBeanCollectionDataSource beanCollectionDataSource = new JRBeanCollectionDataSource(getObjPrintList());
String reportPath= FacesContext.getCurrentInstance().getExternalContext().getRealPath("/reports/Receipt.jasper");
JasperPrint jasperPrint=JasperFillManager.fillReport(reportPath,getReportParameters(), beanCollectionDataSource);
HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
httpServletResponse.setContentType("application / pdf");
httpServletResponse.addHeader("Content-disposition", "inline; filename=Receipt_" +objPrint.getDateNp()+".pdf");
ServletOutputStream servletOutputStream = httpServletResponse.getOutputStream();
servletOutputStream.write(JasperExportManager.exportReportToPdf(jasperPrint));
servletOutputStream.flush();
servletOutputStream.close();
FacesContext.getCurrentInstance().renderResponse();
FacesContext.getCurrentInstance().responseComplete();
}
catch(JRException e){
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}