这是我的java对象:
Class1.java:
public class Class1 {
public Class2 object2;
...
}
Class2.java:
public class Class2 {
public Class3 object3;
...
}
Class3.java:
public class Class3 {
public List<Class4> list4;
...
}
Class4.java:
public class Class4 {
public String string1;
public String string2;
public String string3;
public Class5 object5;
...
}
我有一个包含子报表的报告,并且两者都使用相同的数据源,如下所示:
public static void execute(List<Class1> data) throws FileNotFoundException, JRException {
BufferedInputStream reportStream = new BufferedInputStream(new FileInputStream("C:/Users/user1/Downloads/report2.jrxml"));
// Bing the datasource with the collection
JRDataSource datasource = new JRBeanCollectionDataSource(data, false);
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("SUBREPORT_DIR", "C:\\Users\\user1\\Downloads\\");
parameters.put("SUB_DATA_SOURCE", data);
// Compile and print the jasper report
JasperReport report = JasperCompileManager.compileReport(reportStream);
JasperPrint print = JasperFillManager.fillReport(report, parameters, datasource);
// Export report to PDF
JasperExportManager.exportReportToPdfFile(print, "C:/Users/user1/Downloads/JavaBeansPDF.pdf");
}
SUB_DATA_SOURCE是我在报告中定义的参数&amp;我在iReport中使用参数类的子报表:java.util.List
我试图将Class1中的简单值显示到报告中,并且它可以正常工作。
但我的问题是如何将我的列表List<Class4> list4
的内容显示在子报告中。
我需要在报告中显示这个“表格”:
string1 ------- string2 ------- string3 ------- object5.getElement1 ...
abc ------------- cde ---------- test ------------- value1 ...
我不知道我的问题是否清楚,请告诉我是否有疑惑或遗漏。
PS:我正在使用JasperReports v5.6.0和iReport v5.6.0
答案 0 :(得分:0)
您将Class4
作为数据源传递,这意味着您在报告中有此字段定义
<jr:table/>
要在<jr:table/>
中显示数据,您需要为此数据创建子报告或使用<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{object2}.getObject3().getList4())]]></dataSourceExpression>
组件。
此子报告或NullPointer
的数据源为:
.equals
处理BMap
超出了这个答案,我假设您拥有所有字段的公共getter