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>