无法将数据源表达式传递给子报表

时间:2014-08-04 08:53:06

标签: java jasper-reports subreport

我通过将数据源表达式传递给子报表得到了以下错误。

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>

请告知。

1 个答案:

答案 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);