[英]JasperReports can't export data with JSF 2 and PrimeFaces 3.5
我正在使用PrimeFaces 3.5 , JasperReports 5.2和JSF 2.x開發應用程序。 我的舊應用程序中有一些由JasperReports 4.5和JSF 1.2編寫的報告頁面。 所有這些報告頁面都在舊應用程序中運行。 我試圖在新應用程序中傳輸這些報告頁面。 在新的應用程序中一切正常,但無法導出報告,也沒有出現任何錯誤。 我想念什么嗎?
這是我的代碼,可以在舊的Jsf 1.2應用程序中完美運行,但不適用於新的應用程序。
private void prepareReport(String reportPath, @SuppressWarnings("rawtypes") List beanList, String outputFormat, String reportName) {
JasperReport jReport = null;
JasperPrint jPrint = null;
try {
jReport = JasperCompileManager.compileReport(reportPath);
jPrint = JasperFillManager.fillReport(jReport, jasperParameter, new JRBeanCollectionDataSource(beanList));
} catch (JRException e) {
e.printStackTrace();
}
FacesContext ctx = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) ctx.getExternalContext().getResponse();
OutputStream outputStream = null;
try {
outputStream = response.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
try {
if (outputFormat.equals(OUTPUT_FORMAT_PDF)) {
response.setContentType("application/pdf");
response.setHeader("Content-disposition", "attachment; filename=" + reportName + ".pdf");
JasperExportManager.exportReportToPdfStream(jPrint, outputStream);
} else if (outputFormat.equals(OUTPUT_FORMAT_EXCEL)) {
response.setContentType("application/xls");
response.setHeader("Content-disposition", "attachment; filename=" + reportName + ".xls");
JExcelApiExporter exporter = new JExcelApiExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outputStream);
exporter.exportReport();
} else if (outputFormat.equals(OUTPUT_FORMAT_RTF)) {
response.setContentType("application/rtf");
response.setHeader("Content-disposition", "attachment; filename=" + reportName + ".rtf");
JRRtfExporter exporter = new JRRtfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outputStream);
exporter.exportReport();
}
} catch (JRException e) {
e.printStackTrace();
}
try {
outputStream.flush();
outputStream.close();
FacesContext.getCurrentInstance().responseComplete();
} catch (IOException e) {
e.printStackTrace();
}
}
這是我稱為支持bean的JSF 2 xhtml頁面的一部分:
<h:panelGrid columns="4" columnClasses="alignTop,alignTop,alignTop,alignTop">
<p:commandButton id="pdfFormatBtn" actionListener="#{reports.pdfFormatSelected}" value="PDF" immediate="true"
icon="pdfIcon" styleClass="tableCell"/>
<p:commandButton id="excelFormatBtn" actionListener="#{reports.pdfFormatSelected}" value="EXCEL" immediate="true"
icon="excelIcon" styleClass="tableCell"/>
<p:commandButton id="rtfFormatBtn" actionListener="#{reports.pdfFormatSelected}" value="RTF" immediate="true"
icon="rtfIcon" styleClass="tableCell"/>
<p:commandButton id="cleanBtn" actionListener="#" value="#{general.clean}" immediate="true"
icon="ui-icon-refresh" styleClass="tableCell"/>
</h:panelGrid>
嘗試使用ajax =“ false”
<p:commandButton id="pdfFormatBtn" actionListener="#{reports.pdfFormatSelected}" value="PDF" immediate="true" icon="pdfIcon" styleClass="tableCell" ajax="false"/>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.