java - 有没有办法像处理主报告一样填写子报告?(贾斯珀报告)
问题描述
有没有办法像我们处理主报告一样填充子报告,然后将它们添加到主报告中?
就像是:
fillReportxxx(subreport, subParams, subDataSource);
mainParams.put("subreport", subreport);
fillReportxxx(mainReport, mainParams, mainDataSource);
我在 Internet 上看到的所有方法都谈到将所有数据源和参数从主报告传递到子报告。但在我的情况下,这样做真的很有帮助。
为什么?
我创建了主 bean 和子报表 bean 并准备用作数据源,但它们有一些共同的字段名称,所以我想我不能将它们全部传递给主报表而不发生冲突(我有很多其中:名称和子报告)。而且我想如果我将所有数据输入集中到我的主报告中,我将不得不创建一个统一的 bean 类,对吗?我也有一些冲突的参数名称(主要和次要名称相同),但这是一个小问题(这是一个问题吗?)。
我从 JasperReports 开始,我发现分别填写每个报告会是更直观的方式。此外,在文档中说:
由于子报表本身就是普通报表,它们就像其他报表一样被编译和填充。这意味着它们还需要一个数据源,以便在填充时从中获取数据。他们还可以依靠参数来获取在填充时使用的附加信息。有两种方法可以为子报表提供参数值。您可以使用 JasperFillManager 类公开的一种 fillReportXXX() 方法提供包含参数值的映射,就像用数据填充普通报告时一样(请参阅第 19 页的“填充报告模板”)
小修复
我已经看到了一些代码,其中子报表 bean 作为参数传递,它可以工作:
JRDataSource dataSourceSubReport = new JRBeanCollectionDataSource(listOfBeans);
parameters.put("SUBREPORT_DIR", subReport);
parameters.put("criteriosDS", dataSourceSubReport);
//and then fill the main normally
fillReportxxx(mainReport, parameters, mainDataSource);
这解决了我的数据源冲突的主要问题,但我发现它可能有点脏。我想这必须是一种更清洁的方式。
另一种方式?
也许我错过了一种将不同的 bean 和参数从主报告传递到子报告的方法,以保持名称和 bean 没有冲突。
解决方案
推荐阅读
- sql - 使用不同数据类型连接表(优化)
- javascript - jQuery qTip 在键盘点击时显示/隐藏(输入键)
- java - 将非静态类的实例化扩展为静态类
- asp.net - 将 SSL3 和 TLS 与 .Net Core ASP.Net MVC 一起使用
- javascript - 为什么当我更改矩阵时我的 JS 路径查找器算法不起作用
- javascript - 在浏览器中使用带有外部 URL 的动态导入
- office-js - saveAsync 在后续调用中失败?
- ios - Xcode 10.3 未生成覆盖率
- php - 如何使用 PHP (Laravel 5.8) 从 Firebase 计算用户数
- python - Django REST Framework:尝试获取序列化程序上的字段值时出现AttributeError