根据给出的信息,这将是答案。
主豆(你的目标?),包含List
其他豆子(SubBean
).
public class Bean {
private String var1;
private List<SubBean> subBeans;
public String getVar1() {
return var1;
}
public void setVar1(String var1) {
this.var1 = var1;
}
public List<SubBean> getSubBeans() {
return subBeans;
}
public void setSubBeans(List<SubBean> subBean) {
this.subBeans = subBean;
}
}
Sub bean
public class SubBean {
private String var2;
public SubBean(String var2){
this.var2 = var2;
}
public String getVar2() {
return var2;
}
public void setVar2(String var2) {
this.var2 = var2;
}
}
如何将 SubBean 列表传递给子报表。
-
您需要主报告中的 subBeans 字段。
<field name="subBeans" class="java.util.List"/>
-
我建议您将 .jasper 文件的位置作为参数传递(注意 jasper 报告需要绝对路径)es。在主要报告中
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false"/>
并在java中传递它(在示例中,工作目录中的子文件夹“jasper”是subreport.jasper的位置)
paramMap.put("SUBREPORT_DIR", new File("jasper").getAbsolutePath() + File.separator);
-
现在只需从主报告中调用您的子报告(需要编译成.jasper),如下所示。
<subreport>
<reportElement x="105" y="4" width="400" height="100"/>
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{subBeans})]]></dataSourceExpression>
<subreportExpression class="java.lang.String"><![CDATA[$P{SUBREPORT_DIR} + "subreport.jasper"]]></subreportExpression>
</subreport>
Hence:
我正在创建一个新的JR数据源对于通过的子报告List
of SubBean
在当前的Bean
new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{subBeans})
表示编译后的subreport.jasper的绝对位置
$P{SUBREPORT_DIR} + "subreport.jasper"
所以现在在您的子报告中您可以使用该字段:var2
of the SubBean
,只需在subreport.jrxml中这样定义即可
<field name="var2" class="java.lang.String"/>