【问题标题】:JasperReports can't export data with JSF 2 and PrimeFaces 3.5JasperReports 无法使用 JSF 2 和 PrimeFaces 3.5 导出数据
【发布时间】:2013-11-03 08:56:00
【问题描述】:

我正在使用 PrimeFaces 3.5JasperReports 5.2JSF 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();
    }
}

这是我称之为支持 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>

【问题讨论】:

  • 当你已经在使用 Primefaces 为什么不考虑使用&lt;p:dataExporter&gt;primefaces.org/showcase/ui/exporterHome.jsf
  • 我不是简单地导出一些数据表,也就是 所做的。我有 JasperReport 的 iReport 设计师设计的非常独特的报表页面,我想将它们全部转移到新应用程序中。
  • 您知道为什么上面的代码适用于 JSF 1.2 和 JasperReport 4.5 而不适用于 JSF 2.x、JasperReport 5.2 和 PrimeFaces 3.5?真的需要帮助。

标签: java jsf-2 primefaces jasper-reports


【解决方案1】:

尝试使用 ajax="false"

&lt;p:commandButton id="pdfFormatBtn" actionListener="#{reports.pdfFormatSelected}" value="PDF" immediate="true" icon="pdfIcon" styleClass="tableCell" ajax="false"/&gt;

【讨论】:

    猜你喜欢
    • 2014-09-29
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 2023-03-06
    • 2013-08-21
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多