JasperReports 多数据源
最后修改日期:2024 年 2 月 12 日
JasperReports 多数据源教程展示了如何使用 JasperReports 库生成包含多个数据源的报告。
JasperReports 是一个开源报告库。它可以创建各种格式的报告,包括 PDF、HTML、XLS 或 CSV。JasperReports 创建面向页面、可直接打印的文档。
JasperReports 多数据源示例
下面的应用程序在一个报告中显示来自两个不同数据源的数据。
pom.xml src └── main ├── java │ └── com │ └── zetcode │ ├── model │ │ ├── Car.java │ │ └── Country.java │ └── main │ ├── CommandLineRunner.java │ └── JasperMultipleDataSources.java └── resources └── report2.xml
这是项目结构。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zetcode</groupId> <artifactId>multipledatasets</artifactId> <version>1.0-SNAPSHOT</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <exec.mainClass>com.zetcode.main.CommandLineRunner</exec.mainClass> </properties> <dependencies> <dependency> <groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports</artifactId> <version>6.9.0</version> </dependency> </dependencies> </project>
Maven pom.xml
文件包含 jasperreports
依赖项。
package com.zetcode.model; public class Car { private Long id; private String name; private int price; public Car() {} public Car(Long id, String name, int price) { this.id = id; this.name = name; this.price = price; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } @Override public String toString() { return "Car{" + "id=" + id + ", name=" + name + ", price=" + price + '}'; } }
这是一个 Car
bean 类。它包含汽车 ID、名称和价格属性。
package com.zetcode.model; public class Country { private Long id; private String name; private int population; public Country(Long id, String name, int population) { this.id = id; this.name = name; this.population = population; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPopulation() { return population; } public void setPopulation(int population) { this.population = population; } }
这是一个 Country
bean 类。它包含国家 ID、名称和人口属性。
<?xml version = "1.0" encoding = "UTF-8"?> <!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"> <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="freport" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20"> <style name="field" fontSize="11" /> <style name="textRight" style="field" hAlign="Right" /> <subDataset name="dataset1"> <field name="id" class="java.lang.Long"/> <field name="name" class="java.lang.String"/> <field name="price" class="java.lang.Integer"/> </subDataset> <subDataset name="dataset2"> <field name="id" class="java.lang.Long"/> <field name="name" class="java.lang.String"/> <field name="population" class="java.lang.Integer"/> </subDataset> <parameter name="datasource1" class="java.util.List"/> <parameter name="datasource2" class="java.util.List"/> <detail> <band height="15"> <componentElement> <reportElement x="0" y="0" width="100" height="15"/> <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"> <datasetRun subDataset="dataset2"> <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource2})]]></dataSourceExpression> </datasetRun> <jr:listContents height="15" width="220"> <textField> <reportElement x="0" y="0" width="20" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="50" y="0" width="80" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="130" y="0" width="80" height="15" style="textRight" /> <textElement /> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{population}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> <componentElement> <reportElement x="250" y="0" width="100" height="15"/> <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"> <datasetRun subDataset="dataset1"> <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource1})]]></dataSourceExpression> </datasetRun> <jr:listContents height="15" width="220"> <textField> <reportElement x="0" y="0" width="20" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="50" y="0" width="80" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="130" y="0" width="80" height="15" style="textRight" /> <textElement /> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{price}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> </band> </detail> </jasperReport>
这是报告模板文件。该报告包含两个列表组件。列表组件从传递给报告的列表参数加载数据。
<subDataset name="dataset1"> <field name="id" class="java.lang.Long"/> <field name="name" class="java.lang.String"/> <field name="price" class="java.lang.Integer"/> </subDataset> <subDataset name="dataset2"> <field name="id" class="java.lang.Long"/> <field name="name" class="java.lang.String"/> <field name="population" class="java.lang.Integer"/> </subDataset>
我们有两个子数据集;每个数据集有三个字段。这些字段映射到 Java bean 的属性。
<parameter name="datasource1" class="java.util.List"/> <parameter name="datasource2" class="java.util.List"/>
该报告接受两个 java.util.List
参数。
<componentElement> <reportElement x="0" y="0" width="100" height="15"/> <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"> <datasetRun subDataset="dataset2"> <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource2})]]></dataSourceExpression> </datasetRun> <jr:listContents height="15" width="220"> <textField> <reportElement x="0" y="0" width="20" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="50" y="0" width="80" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="130" y="0" width="80" height="15" style="textRight" /> <textElement /> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{population}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> <componentElement> <reportElement x="250" y="0" width="100" height="15"/> <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"> <datasetRun subDataset="dataset1"> <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource1})]]></dataSourceExpression> </datasetRun> <jr:listContents height="15" width="220"> <textField> <reportElement x="0" y="0" width="20" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="50" y="0" width="80" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="130" y="0" width="80" height="15" style="textRight" /> <textElement /> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{price}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> </band> </detail> </jasperReport>
这是报告模板文件。该报告包含两个列表组件。列表组件从传递给报告的列表参数加载数据。
<subDataset name="dataset1"> <field name="id" class="java.lang.Long"/> <field name="name" class="java.lang.String"/> <field name="price" class="java.lang.Integer"/> </subDataset> <subDataset name="dataset2"> <field name="id" class="java.lang.Long"/> <field name="name" class="java.lang.String"/> <field name="population" class="java.lang.Integer"/> </subDataset>
我们有两个子数据集;每个数据集有三个字段。这些字段映射到 Java bean 的属性。
<parameter name="datasource1" class="java.util.List"/> <parameter name="datasource2" class="java.util.List"/>
该报告接受两个 java.util.List
参数。
<componentElement> <reportElement x="0" y="0" width="100" height="15"/> <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"> <datasetRun subDataset="dataset2"> <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource2})]]></dataSourceExpression> </datasetRun> <jr:listContents height="15" width="220"> <textField> <reportElement x="0" y="0" width="20" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="50" y="0" width="80" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="130" y="0" width="80" height="15" style="textRight" /> <textElement /> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{population}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> <componentElement> <reportElement x="250" y="0" width="100" height="15"/> <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"> <datasetRun subDataset="dataset1"> <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource1})]]></dataSourceExpression> </datasetRun> <jr:listContents height="15" width="220"> <textField> <reportElement x="0" y="0" width="20" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="50" y="0" width="80" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="130" y="0" width="80" height="15" style="textRight" /> <textElement /> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{price}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> </band> </detail> </jasperReport>
这是报告模板文件。该报告包含两个列表组件。列表组件从传递给报告的列表参数加载数据。
<subDataset name="dataset1"> <field name="id" class="java.lang.Long"/> <field name="name" class="java.lang.String"/> <field name="price" class="java.lang.Integer"/> </subDataset> <subDataset name="dataset2"> <field name="id" class="java.lang.Long"/> <field name="name" class="java.lang.String"/> <field name="population" class="java.lang.Integer"/> </subDataset>
我们有两个子数据集;每个数据集有三个字段。这些字段映射到 Java bean 的属性。
<parameter name="datasource1" class="java.util.List"/> <parameter name="datasource2" class="java.util.List"/>
该报告接受两个 java.util.List
参数。
<componentElement> <reportElement x="0" y="0" width="100" height="15"/> <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"> <datasetRun subDataset="dataset2"> <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource2})]]></dataSourceExpression> </datasetRun> <jr:listContents height="15" width="220"> <textField> <reportElement x="0" y="0" width="20" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="50" y="0" width="80" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="130" y="0" width="80" height="15" style="textRight" /> <textElement /> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{population}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> <componentElement> <reportElement x="250" y="0" width="100" height="15"/> <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"> <datasetRun subDataset="dataset1"> <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource1})]]></dataSourceExpression> </datasetRun> <jr:listContents height="15" width="220"> <textField> <reportElement x="0" y="0" width="20" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="50" y="0" width="80" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="130" y="0" width="80" height="15" style="textRight" /> <textElement /> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{price}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> </band> </detail> </jasperReport>
这是报告模板文件。该报告包含两个列表组件。列表组件从传递给报告的列表参数加载数据。
<subDataset name="dataset1"> <field name="id" class="java.lang.Long"/> <field name="name" class="java.lang.String"/> <field name="price" class="java.lang.Integer"/> </subDataset> <subDataset name="dataset2"> <field name="id" class="java.lang.Long"/> <field name="name" class="java.lang.String"/> <field name="population" class="java.lang.Integer"/> </subDataset>
我们有两个子数据集;每个数据集有三个字段。这些字段映射到 Java bean 的属性。
<parameter name="datasource1" class="java.util.List"/> <parameter name="datasource2" class="java.util.List"/>
该报告接受两个 java.util.List
参数。
<componentElement> <reportElement x="0" y="0" width="100" height="15"/> <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"> <datasetRun subDataset="dataset2"> <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource2})]]></dataSourceExpression> </datasetRun> <jr:listContents height="15" width="220"> <textField> <reportElement x="0" y="0" width="20" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="50" y="0" width="80" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="130" y="0" width="80" height="15" style="textRight" /> <textElement /> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{population}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> <componentElement> <reportElement x="250" y="0" width="100" height="15"/> <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"> <datasetRun subDataset="dataset1"> <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource1})]]></dataSourceExpression> </datasetRun> <jr:listContents height="15" width="220"> <textField> <reportElement x="0" y="0" width="20" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="50" y="0" width="80" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="130" y="0" width="80" height="15" style="textRight" /> <textElement /> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{price}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> </band> </detail> </jasperReport>
这是报告模板文件。该报告包含两个列表组件。列表组件从传递给报告的列表参数加载数据。
<subDataset name="dataset1"> <field name="id" class="java.lang.Long"/> <field name="name" class="java.lang.String"/> <field name="price" class="java.lang.Integer"/> </subDataset> <subDataset name="dataset2"> <field name="id" class="java.lang.Long"/> <field name="name" class="java.lang.String"/> <field name="population" class="java.lang.Integer"/> </subDataset>
我们有两个子数据集;每个数据集有三个字段。这些字段映射到 Java bean 的属性。
<parameter name="datasource1" class="java.util.List"/> <parameter name="datasource2" class="java.util.List"/>
该报告接受两个 java.util.List
参数。
<componentElement> <reportElement x="0" y="0" width="100" height="15"/> <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"> <datasetRun subDataset="dataset2"> <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource2})]]></dataSourceExpression> </datasetRun> <jr:listContents height="15" width="220"> <textField> <reportElement x="0" y="0" width="20" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="50" y="0" width="80" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="130" y="0" width="80" height="15" style="textRight" /> <textElement /> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{population}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> <componentElement> <reportElement x="250" y="0" width="100" height="15"/> <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"> <datasetRun subDataset="dataset1"> <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource1})]]></dataSourceExpression> </datasetRun> <jr:listContents height="15" width="220"> <textField> <reportElement x="0" y="0" width="20" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="50" y="0" width="80" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="130" y="0" width="80" height="15" style="textRight" /> <textElement /> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{price}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> </band> </detail> </jasperReport>
这是报告模板文件。该报告包含两个列表组件。列表组件从传递给报告的列表参数加载数据。
<subDataset name="dataset1"> <field name="id" class="java.lang.Long"/> <field name="name" class="java.lang.String"/> <field name="price" class="java.lang.Integer"/> </subDataset> <subDataset name="dataset2"> <field name="id" class="java.lang.Long"/> <field name="name" class="java.lang.String"/> <field name="population" class="java.lang.Integer"/> </subDataset>
我们有两个子数据集;每个数据集有三个字段。这些字段映射到 Java bean 的属性。
<parameter name="datasource1" class="java.util.List"/> <parameter name="datasource2" class="java.util.List"/>
该报告接受两个 java.util.List
参数。
<componentElement> <reportElement x="0" y="0" width="100" height="15"/> <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"> <datasetRun subDataset="dataset2"> <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource2})]]></dataSourceExpression> </datasetRun> <jr:listContents height="15" width="220"> <textField> <reportElement x="0" y="0" width="20" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="50" y="0" width="80" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="130" y="0" width="80" height="15" style="textRight" /> <textElement /> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{population}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> <componentElement> <reportElement x="250" y="0" width="100" height="15"/> <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"> <datasetRun subDataset="dataset1"> <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource1})]]></dataSourceExpression> </datasetRun> <jr:listContents height="15" width="220"> <textField> <reportElement x="0" y="0" width="20" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="50" y="0" width="80" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="130" y="0" width="80" height="15" style="textRight" /> <textElement /> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{price}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> </band> </detail> </jasperReport>
这是报告模板文件。该报告包含两个列表组件。列表组件从传递给报告的列表参数加载数据。
<subDataset name="dataset1"> <field name="id" class="java.lang.Long"/> <field name="name" class="java.lang.String"/> <field name="price" class="java.lang.Integer"/> </subDataset> <subDataset name="dataset2"> <field name="id" class="java.lang.Long"/> <field name="name" class="java.lang.String"/> <field name="population" class="java.lang.Integer"/> </subDataset>
我们有两个子数据集;每个数据集有三个字段。这些字段映射到 Java bean 的属性。
<parameter name="datasource1" class="java.util.List"/> <parameter name="datasource2" class="java.util.List"/>
该报告接受两个 java.util.List
参数。
<componentElement> <reportElement x="0" y="0" width="100" height="15"/> <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"> <datasetRun subDataset="dataset2"> <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource2})]]></dataSourceExpression> </datasetRun> <jr:listContents height="15" width="220"> <textField> <reportElement x="0" y="0" width="20" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="50" y="0" width="80" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="130" y="0" width="80" height="15" style="textRight" /> <textElement /> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{population}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> <componentElement> <reportElement x="250" y="0" width="100" height="15"/> <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"> <datasetRun subDataset="dataset1"> <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource1})]]></dataSourceExpression> </datasetRun> <jr:listContents height="15" width="220"> <textField> <reportElement x="0" y="0" width="20" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="50" y="0" width="80" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="130" y="0" width="80" height="15" style="textRight" /> <textElement /> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{price}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> </band> </detail> </jasperReport>
这是报告模板文件。该报告包含两个列表组件。列表组件从传递给报告的列表参数加载数据。
<subDataset name="dataset1"> <field name="id" class="java.lang.Long"/> <field name="name" class="java.lang.String"/> <field name="price" class="java.lang.Integer"/> </subDataset> <subDataset name="dataset2"> <field name="id" class="java.lang.Long"/> <field name="name" class="java.lang.String"/> <field name="population" class="java.lang.Integer"/> </subDataset>
我们有两个子数据集;每个数据集有三个字段。这些字段映射到 Java bean 的属性。
<parameter name="datasource1" class="java.util.List"/> <parameter name="datasource2" class="java.util.List"/>
该报告接受两个 java.util.List
参数。
<componentElement> <reportElement x="0" y="0" width="100" height="15"/> <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"> <datasetRun subDataset="dataset2"> <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource2})]]></dataSourceExpression> </datasetRun> <jr:listContents height="15" width="220"> <textField> <reportElement x="0" y="0" width="20" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="50" y="0" width="80" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="130" y="0" width="80" height="15" style="textRight" /> <textElement /> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{population}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> <componentElement> <reportElement x="250" y="0" width="100" height="15"/> <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"> <datasetRun subDataset="dataset1"> <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource1})]]></dataSourceExpression> </datasetRun> <jr:listContents height="15" width="220"> <textField> <reportElement x="0" y="0" width="20" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="50" y="0" width="80" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="130" y="0" width="80" height="15" style="textRight" /> <textElement /> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{price}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> </band> </detail> </jasperReport>
这是报告模板文件。该报告包含两个列表组件。列表组件从传递给报告的列表参数加载数据。
<subDataset name="dataset1"> <field name="id" class="java.lang.Long"/> <field name="name" class="java.lang.String"/> <field name="price" class="java.lang.Integer"/> </subDataset> <subDataset name="dataset2"> <field name="id" class="java.lang.Long"/> <field name="name" class="java.lang.String"/> <field name="population" class="java.lang.Integer"/> </subDataset>
我们有两个子数据集;每个数据集有三个字段。这些字段映射到 Java bean 的属性。
<parameter name="datasource1" class="java.util.List"/> <parameter name="datasource2" class="java.util.List"/>
该报告接受两个 java.util.List
参数。
<componentElement> <reportElement x="0" y="0" width="100" height="15"/> <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"> <datasetRun subDataset="dataset2"> <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource2})]]></dataSourceExpression> </datasetRun> <jr:listContents height="15" width="220"> <textField> <reportElement x="0" y="0" width="20" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="50" y="0" width="80" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="130" y="0" width="80" height="15" style="textRight" /> <textElement /> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{population}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> <componentElement> <reportElement x="250" y="0" width="100" height="15"/> <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"> <datasetRun subDataset="dataset1"> <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource1})]]></dataSourceExpression> </datasetRun> <jr:listContents height="15" width="220"> <textField> <reportElement x="0" y="0" width="20" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="50" y="0" width="80" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="130" y="0" width="80" height="15" style="textRight" /> <textElement /> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{price}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> </band> </detail> </jasperReport>
这是报告模板文件。该报告包含两个列表组件。列表组件从传递给报告的列表参数加载数据。
<subDataset name="dataset1"> <field name="id" class="java.lang.Long"/> <field name="name" class="java.lang.String"/> <field name="price" class="java.lang.Integer"/> </subDataset> <subDataset name="dataset2"> <field name="id" class="java.lang.Long"/> <field name="name" class="java.lang.String"/> <field name="population" class="java.lang.Integer"/> </subDataset>
我们有两个子数据集;每个数据集有三个字段。这些字段映射到 Java bean 的属性。
<parameter name="datasource1" class="java.util.List"/> <parameter name="datasource2" class="java.util.List"/>
该报告接受两个 java.util.List
参数。
<componentElement> <reportElement x="0" y="0" width="100" height="15"/> <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"> <datasetRun subDataset="dataset2"> <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource2})]]></dataSourceExpression> </datasetRun> <jr:listContents height="15" width="220"> <textField> <reportElement x="0" y="0" width="20" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="50" y="0" width="80" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="130" y="0" width="80" height="15" style="textRight" /> <textElement /> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{population}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> <componentElement> <reportElement x="250" y="0" width="100" height="15"/> <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"> <datasetRun subDataset="dataset1"> <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource1})]]></dataSourceExpression> </datasetRun> <jr:listContents height="15" width="220"> <textField> <reportElement x="0" y="0" width="20" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="50" y="0" width="80" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="130" y="0" width="80" height="15" style="textRight" /> <textElement /> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{price}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> </band> </detail> </jasperReport>
这是报告模板文件。该报告包含两个列表组件。列表组件从传递给报告的列表参数加载数据。
<subDataset name="dataset1"> <field name="id" class="java.lang.Long"/> <field name="name" class="java.lang.String"/> <field name="price" class="java.lang.Integer"/> </subDataset> <subDataset name="dataset2"> <field name="id" class="java.lang.Long"/> <field name="name" class="java.lang.String"/> <field name="population" class="java.lang.Integer"/> </subDataset>
我们有两个子数据集;每个数据集有三个字段。这些字段映射到 Java bean 的属性。
<parameter name="datasource1" class="java.util.List"/> <parameter name="datasource2" class="java.util.List"/>
该报告接受两个 java.util.List
参数。
<componentElement> <reportElement x="0" y="0" width="100" height="15"/> <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"> <datasetRun subDataset="dataset2"> <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource2})]]></dataSourceExpression> </datasetRun> <jr:listContents height="15" width="220"> <textField> <reportElement x="0" y="0" width="20" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="50" y="0" width="80" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="130" y="0" width="80" height="15" style="textRight" /> <textElement /> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{population}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> <componentElement> <reportElement x="250" y="0" width="100" height="15"/> <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"> <datasetRun subDataset="dataset1"> <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource1})]]></dataSourceExpression> </datasetRun> <jr:listContents height="15" width="220"> <textField> <reportElement x="0" y="0" width="20" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="50" y="0" width="80" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="130" y="0" width="80" height="15" style="textRight" /> <textElement /> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{price}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> </band> </detail> </jasperReport>
这是报告模板文件。该报告包含两个列表组件。列表组件从传递给报告的列表参数加载数据。
<subDataset name="dataset1"> <field name="id" class="java.lang.Long"/> <field name="name" class="java.lang.String"/> <field name="price" class="java.lang.Integer"/> </subDataset> <subDataset name="dataset2"> <field name="id" class="java.lang.Long"/> <field name="name" class="java.lang.String"/> <field name="population" class="java.lang.Integer"/> </subDataset>
我们有两个子数据集;每个数据集有三个字段。这些字段映射到 Java bean 的属性。
<parameter name="datasource1" class="java.util.List"/> <parameter name="datasource2" class="java.util.List"/>
该报告接受两个 java.util.List
参数。
<componentElement> <reportElement x="0" y="0" width="100" height="15"/> <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"> <datasetRun subDataset="dataset2"> <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource2})]]></dataSourceExpression> </datasetRun> <jr:listContents height="15" width="220"> <textField> <reportElement x="0" y="0" width="20" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="50" y="0" width="80" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="130" y="0" width="80" height="15" style="textRight" /> <textElement /> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{population}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> <componentElement> <reportElement x="250" y="0" width="100" height="15"/> <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"> <datasetRun subDataset="dataset1"> <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{datasource1})]]></dataSourceExpression> </datasetRun> <jr:listContents height="15" width="220"> <textField> <reportElement x="0" y="0" width="20" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.Long"><![CDATA[$F{id}]]></textFieldExpression> </textField> <textField> <reportElement x="50" y="0" width="80" height="15" style="field" /> <textElement /> <textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression> </textField> <textField> <reportElement x="130" y="0" width="80" height="15" style="textRight" /> <textElement /> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{price}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> </band> </detail> </jasperReport>