struts2 + hibernate3 + jasper-report 5.0 —得到空白报告

我创建了一个应用程序,它使用jasper report 5.0,struts2和hibernate打印出一个报告。 jasper报告使用hql。 该应用程序工作正常,但问题是,当我触发struts动作时,我在浏览器中得到空白报告 ,但当我在netbeans中预览报告时,我正在获取带有数据的报告。

任何人都可以告诉我一些解决方案。

当报告单独运行时

在此处输入图像描述

通过struts2 + hibernate生成相同报告时的空白报告

在此处输入图像描述

我的代码如下所示

在struts.xml

        /Reports_HSE/sample.jasper myList PDF     

HibernateClass.java

 public class HibernateClass { private List myList; Session session; SessionFactory sessionFactory; public String getpdf() { String dest = ServletActionContext.getServletContext().getRealPath("/Reports_HSE/sample.jasper"); session = createSession(); Map parameterMap = new HashMap(); parameterMap.put( JRHibernateQueryExecuterFactory.PARAMETER_HIBERNATE_SESSION, session); try { System.out.println("Filling report..."); JasperFillManager.fillReportToFile(dest, parameterMap); System.out.println("Done!"); return "success"; } catch (JRException e) { System.out.println("There was an error filling the report."); e.printStackTrace(); return "error"; } } public List getMyList() { return myList; } private Session createSession() { SessionFactory sessionFactory = new Configuration().configure() .buildSessionFactory(); return sessionFactory.openSession(); } } 

sample.jrxml

                                                                  

的结果

 JasperFillManager.fillReportToFile(dest, parameterMap); 

是带文件名的String。 该文件包含jrPrint对象。

如果你不使用这个文件,怎么能看到执行报告的结果?

我只是建议你应该去

 JasperPrint fill(java.lang.String sourceFileName, java.util.Map params) 

然后,处理JasperPrint对象的返回引用。 您还可以检查是否所有数据都存在于其中。根据文档, JasperPrint – 此类的实例表示面向页面的文档,可以查看,打印或导出为其他格式。填写报表设计时数据,引擎生成此类的实例,这些实例可以通过网络传输,以序列化forms存储在磁盘上或导出为各种其他格式,如PDF,HTML,XLS,CSV或XML。

我遇到了同样的问题,所以我删除了Struts2-JasperReports-Plugin jar并自己编写了导出代码。 这很简单!

 public void exportReport() { try { ServletOutputStream outputStream = ServletActionContext.getResponse().getOutputStream(); Map parameters = new HashMap<>(); parameters.put("id","1"); //Get the parameters and report according to your application byte[] bytes = JasperRunManager.runReportToPdf(jasperReport, parameters, myList); //Setting the response as a downloadable attachment ServletActionContext.getResponse().setContentType("application/pdf"); ServletActionContext.getResponse().setHeader("Content-Disposition: attachment", "inline; filename=report.pdf"); outputStream.write(bytes, 0, bytes.length); outputStream.flush(); outputStream.close(); } catch(Exception e) { addActionError("Unable to generate report"); } } 

导出到XLS的工作方式非常相似。

编辑:从连接对象更改为数据源