Jasper reports 在Jasper报告中使用多个JavaBean数据源

Jasper reports 在Jasper报告中使用多个JavaBean数据源,jasper-reports,osgi,Jasper Reports,Osgi,正如JasperReport可以将JavaBean集合作为数据源一样。我们可以发送一个包含多个SetCollections引用的单个对象的SetCollection吗。 并使用这些引用在每次传递不同的集合时使用对JasperFillManager.fillReport()的多次调用传递到编译的jrxml文件。 只是想知道编译后的jrxml文件是否会被最后一次调用填充,或者是否会包含每次调用JasperFillManager.fillReport()的数据 这将用最后一个填充。您不能以这种方式使用

正如JasperReport可以将JavaBean集合作为数据源一样。我们可以发送一个包含多个SetCollections引用的单个对象的SetCollection吗。 并使用这些引用在每次传递不同的集合时使用对JasperFillManager.fillReport()的多次调用传递到编译的jrxml文件。
只是想知道编译后的jrxml文件是否会被最后一次调用填充,或者是否会包含每次调用JasperFillManager.fillReport()的数据

这将用最后一个填充。您不能以这种方式使用多个数据源。尽管还有其他方法可以做到这一点。通过参数映射传递集合就是其中之一。

最后!!。。 完成了任务。 感谢@Vycuss,因为我只使用子报表实现了它

mainreport = JasperCompileManager.compileReport(//path of mainreport.jrxml);
subreport = JasperCompileManager.compileReport(//path of subreport.jrxml);
Map<String, Object> params = new HashMap<String, Object>();
params.put("SUB_REPORT", subreport);
params.put("DATA_SOURCE", empService.getEmpProject());

jprint1 = JasperFillManager.fillReport(mainreport,params,new JRBeanCollectionDataSource(empService.getEmpBean()));
JasperExportManager.exportReportToPdfFile(jprint1, "C://Test.pdf");
mainreport=jasprocmpilemanager.compileReport(//mainreport.jrxml的路径);
subreport=jaspecpompilemanager.compileReport(//subreport.jrxml的路径);
Map params=新的HashMap();
参数put(“子报告”,子报告);
参数put(“数据源”,empService.getEmpProject());
jprint1=JasperFillManager.fillReport(mainreport,params,新的JRBeanCollectionDataSource(empService.getEmpBean());
JasperExportManager.exportReportToPdfFile(jprint1,“C://Test.pdf”);
方法: 在创建OSGi包时,在Activator.java中完成上述代码之后。 在MainReport.jrxml中创建两个参数 第一个是没有类型的“SUB_REPORT”,第二个是java.util.collection类型的“DATA_SOURCE”。 现在在MainReport中提供 新的net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{data_SOURCE}) 作为放置在详细信息标注栏中的子报表元素的数据源表达式。 还要确保子报表只有列标题、详细信息和列页脚标注栏。
子报表中的字段也将为javabeans的相应成员创建。

谢谢,我同意通过param Map,但是在jrxml设计中,我无法访问在param-Map中传递其集合的类的字段。在访问时,我能得到的只是收集方法,而不是Profile类的实际成员。如果我执行类似$P{ProfileSet}.iterator().next().getName()的操作,它会像net.sf.jasperreports.engine.JRException一样抛出e:编译报表表达式类文件1时遇到错误。类型对象值=((java.util.Collection)参数_PROFILE.getValue()).iterator().next().getFirstName()的方法getFirstName()未定义//$JR_EXPR_ID=8$我想出了一个办法。我正在为不同的数据源生成不同的PDF,并使用JRPDFExporter合并它们。我现在面临的唯一问题是,当JRPDFExporter连接两个jasperprints时,它不会删除空空间。我的意思是下一代JasperPrint对象PDF从新页面开始,前一页半满。有了JasperReports,您可以在主报表中使用子报表,我认为它将解决您的问题。为所需的每个集合创建一个子报表,并将它们像数据源一样添加到每个集合中(不是java代码,而是ireport中)。在这些问题中有一些东西:,我理解逻辑,但在您的第一个链接中,我们必须将子报表作为参数传递。我们必须在主报告中创建一个参数。但是参数类型呢?我的意思是对象不在下拉列表中。它显示了它可以是collection/set/io.InputStream或其他java原语。我已经观察到如何使用多个数据源的问题,这是我面临的许多问题。不客气。如果我的答案/评论对您有所帮助,您可以投票作为您选择的答案。@Nilesh:您是否遇到过总页数的问题?我使用相同的过程,但我的总页面没有更新,因为这两个都是不同的报告。请告诉我你是如何克服的