JasperReport - 第二次没有数据开放

时间:2015-11-16 19:40:39

标签: java caching jasper-reports

我正在开发一个Java Swing应用程序,其中可以生成包含一些可变数据的报告和包含测量值的子报告。

第一次调用操作时,报告按预期生成并在JasperViewer中正确显示。但是如果第二次调用相同的动作,则只显示静态数据。没有其他任何东西生成。

以下代码显示了生成报告的操作:

@Override
public void actionPerformed(ActionEvent e)
{
    try
    {
        InputStream jasperStream = this.getClass().getClassLoader().getResourceAsStream(jasperReport);

        MeasurementSubReport measurementReport = new MeasurementSubReport(
            reportService.loadReportColumns(),
            reportService.loadMeasuredValues(),
            reportService.loadStatisticValues());
        JasperReport subreport = JasperCompileManager.compileReport(measurementReport.createSubReport());

        Map<String, Object> hm = new HashMap<>();
        hm.put("MEASURE_DATASOURCE", new JREmptyDataSource());
        hm.put("MEASURE_SUBREPORT", subreport);
        hm.put(JRParameter.REPORT_LOCALE, Locale.getDefault());
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperStream, hm, reportDataBean);

        JasperViewer viewer = new JasperViewer(jasperPrint, false);
        viewer.setTitle(BUNDLE.getString("JasperReportAction.viewer.title"));
        viewer.setVisible(true);
    }
    catch (Exception ex)
    {
        ErrorDialog.showError(BUNDLE.getString("JasperReportAction.error.txt"), ex);
    }
}

似乎JasperReports缓存了一些生成的代码。它是否正确?我该如何阻止缓存?

1 个答案:

答案 0 :(得分:1)

我有类似的代码,没有缓存问题,现在我猜一些,因为reportDataBean在代码中不可见。

我猜你的reportDataBeanJRDatasource,如果它是JRRewindableDataSource你需要倒回moveFirst(),因为它会在你执行报告后结束第一次。

如果不是JRRewindableDataSource,则需要重新创建它。