Jasper reports Jasper子报表仅在第一页填充-Java

Jasper reports Jasper子报表仅在第一页填充-Java,jasper-reports,subreport,Jasper Reports,Subreport,我有一个主报表,在组页脚中有一个子报表。目标是在每页上显示此子报表。在Jaspersoft Studio中,这一点非常有效,但当我在Spring服务中编译并填充模板时,子报表仅在第一页填充。当我在“无数据类型时”中添加“所有部分无详细信息”时,我只看到列标题。我花了好几个小时试图调试,但没有成功。下面是jrxml和java代码 JRXML <groupFooter> <band height="144"> <subrepo

我有一个主报表,在组页脚中有一个子报表。目标是在每页上显示此子报表。在Jaspersoft Studio中,这一点非常有效,但当我在Spring服务中编译并填充模板时,子报表仅在第一页填充。当我在“无数据类型时”中添加“所有部分无详细信息”时,我只看到列标题。我花了好几个小时试图调试,但没有成功。下面是jrxml和java代码

JRXML

<groupFooter>
    <band height="144">
        <subreport>
            <reportElement x="70" y="90" width="642" height="30" uuid="47af6568-4e1c-4dc4-8688-dfb4d6e17bbc"/>
            <dataSourceExpression><![CDATA[$P{TEMPLATE_DATA}]]></dataSourceExpression>
            <subreportExpression><![CDATA[$P{TEMPLATE_XML}]]></subreportExpression>
        </subreport>
    </band>
</groupFooter>

Java代码

Map<String, Object> parameters = new HashMap<>()
parameters.add("TEMPLATE_XML", compiledSubReport)

List<entity> entityList = util.getEntities()
JRBeanCollectionDataSource data = new JRBeanCollectionDataSource(entityList)

parameters.add("TEMPLATE_DATA", data)

return JasperFillManager.fillReport(mainReport, parameters, mainDataSource)
Map参数=新HashMap()
parameters.add(“模板XML”,compiledSubReport)
List entityList=util.getEntities()
JRBeanCollectionDataSource数据=新的JRBeanCollectionDataSource(entityList)
参数。添加(“模板数据”,数据)
返回JasperFillManager.fillReport(mainReport、参数、mainDataSource)

数据源对象不能多次使用,每次显示子报表时都需要创建一个新的数据源对象

您可以通过将
entityList
作为参数传递给报表,然后将其用于子报表来实现这一点:

<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{ENTITY_LIST})]]></dataSourceExpression>