如何将JavaBean属性映射到报告部件字段?
我试图在我的Jasper报告中实现目录。以下是Jasper Reports网站上提供的一个示例,介绍了如何做到这一点: 在上面的示例中,他们对db运行一个查询,以获取填充报告部分*的数据。在我的例子中,我需要用从JavaBean获得的数据填充报告部分,但我找不到解决方案 我知道如何将数据源作为参数从包装报表传递到报表部件,但我不知道如何在那里使用它,以便所有报表部件字段都映射到它。据我所知,定期(无报告部分)是自动完成的 到目前为止我所做的:如何将JavaBean属性映射到报告部件字段?,java,jasper-reports,subreport,Java,Jasper Reports,Subreport,我试图在我的Jasper报告中实现目录。以下是Jasper Reports网站上提供的一个示例,介绍了如何做到这一点: 在上面的示例中,他们对db运行一个查询,以获取填充报告部分*的数据。在我的例子中,我需要用从JavaBean获得的数据填充报告部分,但我找不到解决方案 我知道如何将数据源作为参数从包装报表传递到报表部件,但我不知道如何在那里使用它,以便所有报表部件字段都映射到它。据我所知,定期(无报告部分)是自动完成的 到目前为止我所做的: 创建报告的Java代码: jaspecompilem
jaspecompilemanager.compileReportToFile(“TablePart.jrxml”、“TablePart.jasper”);
JasperReport-JasperReport=jaspecompilemanager.compileReport(“TableOfContentsReport.jrxml”);
JRBeanCollectionDataSource=新的JRBeanCollectionDataSource(generateBeanList());
JasperPrint-JasperPrint=JasperFillManager.fillReport(jaspereport,newhashmap(),dataSource);
exportreportmanager.exportreporttopffile(jasperPrint,“TableOfContentsReport.pdf”);
公共类MyBean{
私有整数orderId;
私有字符串shipName;
私人城市;
私人船舶国家;
私有整数合计;
公共整数getOrderId(){
返回订单ID;
}
公共void setOrderID(整数orderId){
this.orderId=orderId;
}
公共字符串getShipName(){
返回船名;
}
public void setShipName(字符串shipName){
this.shipName=shipName;
}
公共字符串getShipCity(){
回归城市;
}
公共无效设置发货城市(字符串发货城市){
this.shipCity=shipCity;
}
公共字符串getShipCountry(){
返回国家;
}
公共发货国(字符串发货国){
this.shipCountry=shipCountry;
}
公共整数getTotal(){
返回总数;
}
公共void集合总计(整数总计){
这个.总计=总计;
}
}
...
我发现可以将数据源作为参数从包装报告传递到报告部分:$p{report_DATA_SOURCE}
但是我如何在报告部分使用它来映射相应的字段(Jasper报告字段到JavaBean字段)?现在的情况是,报告部分中所有声明的字段都计算为null
...
这些是我需要用传递的JavaBean的相应值设置的字段(orderId、shipName等)
*为了以防万一,这里有一个关于报表部分主题的参考:问题是您传递给子报表的数据源已被使用 使用next在主报表中迭代详细信息栏,并在最后将其传递给子报表 解决方案:
新JREPTYDATASOURCE(1)
,只需要一条记录HashMap
esmap.put(“subreportDataSource”,datasource)
<subreportParameter name="REPORT_DATA_SOURCE">
<subreportParameterExpression><![CDATA[$P{subreportDataSource}]]></subreportParameterExpression>
</subreportParameter>
不是直接作为数据源,但在您的情况下,您可以将
generateBeanList()
作为参数map.put(“dsList”,generateBeanList())
传递给每个子报表,然后传递给新的JRBeanCollectionDataSource($p{dsList})您试图实现的目标有点不清楚,您使用的示例使用来自另一个报表的数据源来生成TOC,您想传递自己的数据源吗?作为参数?,但您要将其作为常规数据源传递。是的,这些字段需要映射到java bean中的getter和setter…因此有很多问题需要解决,我们没有关于您的bean的信息,我会尝试编辑问题以反映您正在尝试实现什么,您当前得到什么,而不是如何适应一个示例。是的,我正在尝试传递我自己的数据源(java bean)到报告部分。对于TOC示例(上面的链接),其中有3个jrxml模板:TableOfContentsReport.jrxml、TablePart.jrxml和TocPart.jrxml,我需要用我的Java bean列表中的数据填充TablePart.jrxml部分。但无论我做什么,这部分中的字段(TablePart.jrxml)都不会使用传递的数据源(JavaBean)。所有报表部分字段的计算结果都为空。我在问题中添加了JavaBean。它很有效,非常感谢!但我仍然想知道,是否有可能在所有报表部分之间共享一个数据源,以便所有报表部分的所有字段都自动映射(按名称约定)到相应的JavaBean属性?