Jasper reports 当我尝试传递报表连接时,为什么get无法转换到net.sf.jasperreports.engine.JRDataSource?

Jasper reports 当我尝试传递报表连接时,为什么get无法转换到net.sf.jasperreports.engine.JRDataSource?,jasper-reports,dataset,connection,classcastexception,Jasper Reports,Dataset,Connection,Classcastexception,我的报表jrxml文件如下所示 <band height="256" splitType="Stretch"> <componentElement> <reportElement x="0" y="0" width="555" height="50" uuid="eb5b00f3-c370-4c7f-bb10-b7589ff293ff"/> <jr:list xmln

我的报表jrxml文件如下所示

<band height="256" splitType="Stretch">
            <componentElement>
                <reportElement x="0" y="0" width="555" height="50" uuid="eb5b00f3-c370-4c7f-bb10-b7589ff293ff"/>
                <jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Vertical">
                    <datasetRun subDataset="listDataset" uuid="364ec058-5b7e-43e0-9272-92907dfba7f3">
                        <datasetParameter name="REPORT_DATE">
                            <datasetParameterExpression><![CDATA[$P{REPORT_DATE}]]></datasetParameterExpression>
                        </datasetParameter>
                        <dataSourceExpression><![CDATA[$P{REPORT_CONNECTION}]]></dataSourceExpression>
                    </datasetRun>
                    <jr:listContents height="50" width="555">
                        <staticText>
                            <reportElement x="1" y="2" width="100" height="20" uuid="cd4ed06d-2c04-4342-8cc2-ff7077621eb6"/>
                            <text><![CDATA[LABEL_VALUE]]></text>
                        </staticText>
                        <textField>
                            <reportElement x="101" y="2" width="129" height="20" uuid="d307fa41-0962-4b17-812d-774262e55e9e"/>
                            <textFieldExpression><![CDATA[$F{LABEL_VALUE}]]></textFieldExpression>
                        </textField>
                        <staticText>
                            <reportElement x="230" y="2" width="140" height="20" uuid="20989891-eb66-45ee-8fbb-b7c53a65f0fe"/>
                            <text><![CDATA[ATTRIBUTE_VALUE]]></text>
                        </staticText>
                        <textField>
                            <reportElement x="370" y="2" width="184" height="20" uuid="fa972e53-dc8a-402e-96ad-9428b402ccd8"/>
                            <textFieldExpression><![CDATA[$F{ATTRIBUTE_VALUE}]]></textFieldExpression>
                        </textField>
                    </jr:listContents>
                </jr:list>
            </componentElement>
</band>

但这里我得到了一个ClassCastException

java.lang.ClassCastException: 无法强制转换org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6 到net.sf.jasperreports.engine.JRDataSource

我无法理解,为什么?

来自JasperReports api

数据集运行声明提供数据集参数的值以及数据集将迭代的数据源。或者,当存在与数据集关联的sql查询时,可以将java.sql.Connection传递给数据集,而不是JRDataSource实例。该查询由引擎使用JDBC连接执行,获得的java.sql.ResultSet对象被迭代

结论运行dataset
datasetRun
时,您可以:

  • 使用
    dataSourceExpression
    标记传递

  • 使用
    connectionExpression
    标记传递JDBC连接

  • 没有通过任何东西

  • 那你做错了什么?

    您在
    dataSourceExpression
    标记中传递JDBC连接,而不是在
    connectionExpression
    标记中,JasperReports预计它是JRDatasource,并尝试将其强制转换为JRDatasource

    如果要传递报表连接,应使用
    connectionExpression
    ,如下所示

    <datasetRun subDataset="listDataset" uuid="364ec058-5b7e-43e0-9272-92907dfba7f3">
        <datasetParameter name="REPORT_DATE">
           <datasetParameterExpression><![CDATA[$P{REPORT_DATE}]]></datasetParameterExpression>
        </datasetParameter>
        <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
    </datasetRun>
    
    
    
    在这份报告中,我不知道为什么要显示部分列表。我的数据集中有20行,但它只显示11行。@user12123您需要通过一个新问题,因为对于这个问题中的数据,我不可能知道。请注意显示完整的jrxml,因此请尽量少使用jrxml来重现问题,并使用查询等方式向我们显示jrxml。