jasper-reports - Jasper 报告:collection bean 的第一个元素被跳过
问题描述
当使用抽象报告和内容页面以及 bean 集合作为数据源时,将跳过集合的第一个元素
有人偶然发现了同样的问题吗?我尝试了多种方法,并在这里和 Jasper Reports 社区中阅读了很多帖子,但均未成功
摘要书(主)代码:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.17.0.final using JasperReports Library version 6.17.0-6d93193241dd8cc42629e188b94f9e0bc5722efd -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Abstract_refactored" pageWidth="595" pageHeight="842" sectionType="Part" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="30" bottomMargin="30" uuid="d2716064-8ae4-40cf-a575-33afba400e3a">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<property name="net.sf.jasperreports.print.create.bookmarks" value="true"/>
<property name="com.jaspersoft.studio.book.group.cover.header" value="Cover and Table of Contents"/>
<property name="com.jaspersoft.studio.book.group.cover.footer" value="Backcover"/>
<parameter name="ubersichtCollectionRefactored" class="net.sf.jasperreports.engine.data.JRBeanCollectionDataSource"/>
<parameter name="SUBREPORT_DIR" class="java.lang.String" evaluationTime="Early">
<defaultValueExpression><![CDATA["/Users/Beer/JaspersoftWorkspace/MyReports/"]]></defaultValueExpression>
</parameter>
<parameter name="CollectionBeanParam" class="net.sf.jasperreports.engine.data.JRBeanCollectionDataSource"/>
<group name="cover"/>
<detail>
<part evaluationTime="Now" uuid="6b9e8284-92b6-4004-a896-77e6650f3afa">
<p:subreportPart xmlns:p="http://jasperreports.sourceforge.net/jasperreports/parts" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/parts http://jasperreports.sourceforge.net/xsd/parts.xsd" usingCache="false">
<subreportParameter name="REPORT_DATA_SOURCE">
<subreportParameterExpression><![CDATA[$P{ubersichtCollectionRefactored}]]></subreportParameterExpression>
</subreportParameter>
<subreportParameter name="ubersichtCollectionRefactored">
<subreportParameterExpression><![CDATA[$P{ubersichtCollectionRefactored}]]></subreportParameterExpression>
</subreportParameter>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "ubersicht_refactored.jasper"]]></subreportExpression>
</p:subreportPart>
</part>
<part uuid="3bbe9fbc-42db-4b15-8120-416514e99d4c">
<p:subreportPart xmlns:p="http://jasperreports.sourceforge.net/jasperreports/parts" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/parts http://jasperreports.sourceforge.net/xsd/parts.xsd">
<subreportParameter name="CollectionBeanParam">
<subreportParameterExpression><![CDATA[$P{CollectionBeanParam}]]></subreportParameterExpression>
</subreportParameter>
<subreportParameter name="REPORT_DATA_SOURCE">
<subreportParameterExpression><![CDATA[$P{CollectionBeanParam}]]></subreportParameterExpression>
</subreportParameter>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "investmentcosts.jasper"]]></subreportExpression>
</p:subreportPart>
</part>
</detail>
</jasperReport>
内容页:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.17.0.final using JasperReports Library version 6.17.0-6d93193241dd8cc42629e188b94f9e0bc5722efd -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="investmentcosts" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="febeabfd-a22b-490f-8e0b-ff52efdc9ffa">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<style name="Table_TH" mode="Opaque" backcolor="#F0F8FF">
<box>
<pen lineWidth="0.5" lineColor="#000000"/>
</box>
</style>
<style name="Table_CH" mode="Opaque" backcolor="#BFE1FF">
<box>
<pen lineWidth="0.5" lineColor="#000000"/>
</box>
</style>
<style name="Table_TD" mode="Opaque" backcolor="#FFFFFF">
<box>
<pen lineWidth="0.5" lineColor="#000000"/>
</box>
</style>
<subDataset name="investmentCostDataset" uuid="1fe5fdcb-a4b2-4546-bd90-2f5578170233">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<field name="product" class="java.lang.String"/>
<field name="quantity" class="java.lang.Integer"/>
<field name="cost" class="java.lang.String"/>
</subDataset>
<parameter name="CollectionBeanParam" class="net.sf.jasperreports.engine.data.JRBeanCollectionDataSource"/>
<detail>
<band height="257" splitType="Stretch">
<componentElement>
<reportElement x="0" y="10" width="524" height="150" uuid="5922b981-1b64-4daa-b492-c1b03192d003">
<property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.VerticalRowLayout"/>
<property name="com.jaspersoft.studio.table.style.table_header" value="Table_TH"/>
<property name="com.jaspersoft.studio.table.style.column_header" value="Table_CH"/>
<property name="com.jaspersoft.studio.table.style.detail" value="Table_TD"/>
</reportElement>
<jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" whenNoDataType="AllSectionsNoDetail">
<datasetRun subDataset="investmentCostDataset" uuid="9d4a3bba-0367-4a02-9a12-5d69ea0f77c8">
<datasetParameter name="REPORT_DATA_SOURCE">
<datasetParameterExpression><![CDATA[$P{CollectionBeanParam}]]></datasetParameterExpression>
</datasetParameter>
<dataSourceExpression><![CDATA[$P{CollectionBeanParam}]]></dataSourceExpression>
</datasetRun>
<jr:column width="260" uuid="7e3b0b3c-03c7-438d-8d74-c70c439d2ac6">
<jr:tableHeader style="Table_TH" height="30" rowSpan="1"/>
<jr:tableFooter style="Table_TH" height="30" rowSpan="1"/>
<jr:columnHeader style="Table_CH" height="30" rowSpan="1">
<staticText>
<reportElement x="0" y="0" width="260" height="30" uuid="88e907e3-8090-4c62-8b42-692390955241"/>
<textElement textAlignment="Center" rotation="None"/>
<text><![CDATA[Produkt]]></text>
</staticText>
</jr:columnHeader>
<jr:columnFooter style="Table_CH" height="30" rowSpan="1"/>
<jr:detailCell style="Table_TD" height="30">
<textField>
<reportElement x="0" y="0" width="260" height="30" uuid="66da7f58-d69f-4a13-b6d5-a8e37d7707b8"/>
<textElement textAlignment="Left">
<paragraph leftIndent="2"/>
</textElement>
<textFieldExpression><![CDATA[$F{product}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
<jr:column width="130" uuid="c098c3a0-7e77-4a47-9b72-530d5a4b10ff">
<jr:tableHeader style="Table_TH" height="30" rowSpan="1"/>
<jr:tableFooter style="Table_TH" height="30" rowSpan="1"/>
<jr:columnHeader style="Table_CH" height="30" rowSpan="1">
<staticText>
<reportElement x="0" y="0" width="130" height="30" uuid="f64de092-ac20-4984-9b55-569910a31b6c"/>
<textElement textAlignment="Center" rotation="None"/>
<text><![CDATA[Menge]]></text>
</staticText>
</jr:columnHeader>
<jr:columnFooter style="Table_CH" height="30" rowSpan="1"/>
<jr:detailCell style="Table_TD" height="30">
<textField>
<reportElement x="0" y="0" width="130" height="30" uuid="a62bdcb7-9257-4b0e-a0e9-10a94efc65f1"/>
<textElement textAlignment="Center"/>
<textFieldExpression><![CDATA[$F{quantity}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
<jr:column width="130" uuid="2fe1cd34-cfc4-426b-b37a-9c1393bffe5b">
<jr:tableHeader style="Table_TH" height="30" rowSpan="1"/>
<jr:tableFooter style="Table_TH" height="30" rowSpan="1"/>
<jr:columnHeader style="Table_CH" height="30" rowSpan="1">
<staticText>
<reportElement x="0" y="0" width="130" height="30" uuid="67b1e188-c745-4651-a9a9-892d71c31255"/>
<textElement textAlignment="Center" rotation="None"/>
<text><![CDATA[Preis]]></text>
</staticText>
</jr:columnHeader>
<jr:columnFooter style="Table_CH" height="30" rowSpan="1"/>
<jr:detailCell style="Table_TD" height="30">
<textField>
<reportElement x="0" y="0" width="130" height="30" uuid="2888a61e-7a85-4117-91fc-cab41dc5e00a"/>
<textElement textAlignment="Center"/>
<textFieldExpression><![CDATA[$F{cost}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
</jr:table>
</componentElement>
</band>
</detail>
</jasperReport>
添加java代码:
File fileAbstractBook = ResourceUtils.getFile("classpath:report/Abstract_refactored.jrxml");
InputStream inputAbstractBook = new FileInputStream(fileAbstractBook.getAbsolutePath());
JasperDesign jasperAbstractBook = JRXmlLoader.load(inputAbstractBook);
JasperReport abstractBook = JasperCompileManager.compileReport(jasperAbstractBook);
JRBeanCollectionDataSource dataSource1 = new JRBeanCollectionDataSource(investmentCostsList);
JRBeanCollectionDataSource dataSource2 = new JRBeanCollectionDataSource(ubersichtList);
Map<String, Object> params = new HashMap<>();
//Path path = Paths.get(fileInvestmentCosts.getAbsolutePath());
Path path = Paths.get(fileSub.getAbsolutePath());
System.out.println("Path of the report resources"+ path.getParent());
params.put("CollectionBeanParam", dataSource1);//ubersichtCollectionBeanParam
params.put("ubersichtCollectionRefactored", dataSource2);//ubersichtCollectionBeanParam
params.put("SUBREPORT_DIR", path.getParent() + "/");
JasperPrint print = JasperFillManager.fillReport(abstractBook, params, new JREmptyDataSource());
解决方案
您同时传递$P{CollectionBeanParam}
了REPORT_DATA_SOURCE
用于主报表数据集的 as 和CollectionBeanParam
作为数据源传递给表子数据集的 as 。主数据集使用数据源实例中的第一条记录,然后将其传递给表子数据集,该子数据集在剩余记录上进行迭代。
从外观上看,零件的主数据集investmentcosts
并没有从数据源中读取任何内容,因此您应该REPORT_DATA_SOURCE
为零件传递一个空的数据源。如在
<part uuid="3bbe9fbc-42db-4b15-8120-416514e99d4c">
<p:subreportPart xmlns:p="http://jasperreports.sourceforge.net/jasperreports/parts" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/parts http://jasperreports.sourceforge.net/xsd/parts.xsd">
<subreportParameter name="CollectionBeanParam">
<subreportParameterExpression><![CDATA[$P{CollectionBeanParam}]]></subreportParameterExpression>
</subreportParameter>
<subreportParameter name="REPORT_DATA_SOURCE">
<subreportParameterExpression><![CDATA[new net.sf.jasperreports.engine.JREmptyDataSource()]]></subreportParameterExpression>
</subreportParameter>
<subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "investmentcosts.jasper"]]></subreportExpression>
</p:subreportPart>
</part>
请注意,在表格中,datasetRun
您同时拥有REPORT_DATA_SOURCE
as 参数和dataSourceExpression
. 你只需要一个,虽然两者都不会破坏任何东西。
推荐阅读
- azure - Azure 从 blob 还原 SQL Server 数据库
- c++ - Boost无锁队列正在触发clang的线程清理器
- java - Vaadin 无法更改按钮颜色
- python - 在 Mastermind 游戏中重复功能的问题
- node.js - UnhandledPromiseRejectionWarning:TypeError:无法设置未定义的属性“”
- php - 无法让 .htaccess 在 Laravel 应用程序中正确执行 301 重定向
- python - 无法使用 Jupyter 在 Visual Studio Code 中运行 Python 代码 - “无法从‘Python 3.6.8 64 位’启动 Jupyter 内核”
- php - 如何将php错误的日志记录设置为页面而不是错误日志?
- spring - MongoRepository 的 saveAll() 是批量插入数据吗?
- php - PHP:获取 ICU 版本