0

PrimeFaces 3.5JasperReports 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>
4

1 に答える 1

1

ajax="false" を使用してみてください

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

于 2014-08-18T20:11:07.787 に答える