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

问题描述

我有一个主报告,在组页脚中有一个子报告。目标是在每一页上显示此子报表。在 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)

解决方法

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

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

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...