不同的报告在生成的报告中得到相同的图表图像

Different reports get the same chart image in generated reports

我正在使用 Jasper Reports 在 java 中生成报告。我进行了一些设置,以便在单击某个项目的 link 时,会生成一个基于该项目的报告,其中包含完整的图表图像。问题是,在生成第一份报告后,生成的任何后续报告都将使用与第一份报告相同的图像。我想要的是让每个生成的报告都使用它自己的图表图像。不确定我做错了什么。

注意:我知道这些方法已被弃用。在我尝试升级到新方法之前,我需要让图像正常工作(我也可以使用帮助,但到时候会提出一个单独的问题)。

  else if (export_format != null && export_format.equalsIgnoreCase("HTML")) {
  jasperprint = JasperFillManager.fillReport(inFileStream, map, conn);
  JRHtmlExporter exporter = new JRHtmlExporter();
  HashMap imagesMap = new HashMap();
  request.getSession().setAttribute("IMAGES_MAP", imagesMap);
  request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperprint);

  exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperprint);
  exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream());
  exporter.setParameter(JRHtmlExporterParameter.HTML_HEADER, "");
  exporter.setParameter(JRHtmlExporterParameter.HTML_FOOTER, "");
  exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);
  exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap);
  exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "jasper/images?image=");
  exporter.exportReport();
}

您在后续报告中看到第一个图表的可能原因是浏览器将图像缓存在 jasper/images?image=...

避免这种情况的一种简单方法是向图像 URL 添加一个随机参数:

  exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "jasper/images?random=" + java.util.UUID.randomUUID() + "&image=");