我通过将数据源表达式传递给子报表得到了以下错误。
net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression :
Source text : new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{dataSourceHash})
Java代码:
Vector rs = ..... // return record set from SQL, e.g. select name from table
Map<String, Object> parm = new HashMap<String, Object>();
parm.put("dataSourceHash", new JRBeanCollectionDataSource(rs));
主要报告:
<parameter name="dataSourceHash" class="java.util.Collection" >
....
<subreport>
<reportElement uuid="b60242b1-6bbb-4b6b-b54d-bf9a32cf3ec5" x="0" y="0" width="100" height="24"/>
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{dataSourceHash})]]></dataSourceExpression>
<subreportExpression><![CDATA["C:\\add_template.jasper"]]></subreportExpression>
</subreport>
子报表:
<textFieldExpression><![CDATA[$F{NAME}]]></textFieldExpression>
请告知。
答案 0 :(得分:0)
在jrxml参数$ P {datasourceHash}中声明为 java.util.Collection 。 但实际上你传递了 JRBeanCollectionDataSource - 它不是java.util.Collection。
这应该如何运作?
在子报表中存在构造函数new JRBeanCollectionDataSource( DataSource )??? 但是这个构造函数的参数是集合。
可能的解决方案之一:
替换
parm.put("dataSourceHash", new JRBeanCollectionDataSource(rs));
到
parm.put("dataSourceHash", rs);