gpt4 book ai didi

java - JasperReports 无法使用 JSF 2 和 PrimeFaces 3.5 导出数据

转载 作者:行者123 更新时间:2023-12-01 13:57:08 25 4
gpt4 key购买 nike

我正在使用 PrimeFaces 3.5、JasperReports 5.2 和 JSF 2.x 开发应用程序。我的旧应用程序中有一些由 JasperReports 4.5JSF 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();
}
}

这是 JSF 2 xhtml 页面的一部分,我将其称为支持 bean:

<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"/>

关于java - JasperReports 无法使用 JSF 2 和 PrimeFaces 3.5 导出数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19569520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com