我正在使用 Spring 3 , iReport , JasperReports 4.5.0 来生成报告。我有三张桌子如下。
的表名 的字段
DN 日期
DNProd prodName,prodQty
DNPay cost,totalCost
问题是我需要在单个报告中显示 date,prodName,prodQty,cost,totalCost 字段。但这些指向不同的 POJO 类。我在谷歌搜索了这个并找到了一些解决方案,比如使用子报告。 但由于我是这些报告的新手,我不知道这是否是正确的解决方案。如果可能的话,任何人都可以指出我正确的方向。
答案 0 :(得分:0)
根据我的建议,DynamicJasper最适合您的情况。 您需要正确和HQL,它将从相应的POJO中获得您在问题中描述的所有字段并具有适当的连接。
执行此HQL时,您将获得List。您必须传递给DynamicJasper才能为您构建报告。它将自动从pojo字段名称中获取列名。
下面是相同的例子。
Session session = null;
try {
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
session = sessionFactory.openSession();
session.beginTransaction();
List list = session.createQuery("from Employee").list();
session.getTransaction().commit();
DynamicReport dynamicReport = new ReflectiveReportBuilder(list).build();
dynamicReport.setTitle("List of Employees");
JasperPrint jasperPrint = DynamicJasperHelper.generateJasperPrint(dynamicReport, new ClassicLayoutManager(), list);
JasperViewer.viewReport(jasperPrint);
JasperExportManager.exportReportToPdfFile(jasperPrint, "C:\\TestDynamicJasper.pdf");
resp.getWriter().write("Welcome to Show Report");
resp.getWriter().flush();
resp.getWriter().close();
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ColumnBuilderException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} finally {
if(session != null)
session.close();
}
希望这会对你有所帮助。 :)