如何借助 Table 组件显示 JRBeanCollectionDataSource 数据?

2023-11-25

我需要在表组件(JasperReports)中显示 JRBeanCollectionDataSource 数据。

这是我的模板 ShowPerson.jrxml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<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="ShowPerson" pageWidth="612" pageHeight="792" whenNoDataType="NoDataSection" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="304c4c4e-c99a-4399-8081-748d3b7c0b8c">
    <style name="table">
        <box>
            <pen lineWidth="1.0" lineColor="#000000"/>
        </box>
    </style>
    <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="Table Dataset 1" whenResourceMissingType="Empty" uuid="63b01547-bce2-47c9-ba15-666f94d11387">
        <queryString language="SQL">
            <![CDATA[]]>
        </queryString>
        <field name="name" class="java.lang.String"/>
        <field name="age" class="java.lang.Integer"/>
    </subDataset>
    <parameter name="INFO" class="java.lang.String"/>
    <title>
        <band height="40" splitType="Stretch">
            <staticText>
                <reportElement uuid="e96450a8-8358-4cae-a094-3add06d57de2" x="0" y="20" width="56" height="20"/>
                <textElement/>
                <text><![CDATA[Info]]></text>
            </staticText>
            <textField>
                <reportElement uuid="e21e9932-ebfe-4bb5-904d-ea99e141866b" x="56" y="20" width="100" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$P{INFO}]]></textFieldExpression>
            </textField>
        </band>
    </title>
    <detail>
        <band height="40" splitType="Stretch">
            <componentElement>
                <reportElement uuid="dea5d821-81b6-434b-ae27-4f3a0268e805" key="table 1" x="0" y="0" width="572" height="40"/>
                <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">
                    <datasetRun subDataset="Table Dataset 1" uuid="39f8f0bf-8a2b-44f4-9a4c-0c873da79fba">
                        <datasetParameter name="REPORT_DATA_SOURCE">
                            <datasetParameterExpression><![CDATA[]]></datasetParameterExpression>
                        </datasetParameter>
                        <dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></dataSourceExpression>
                    </datasetRun>
                    <jr:column width="169" uuid="aae649c4-6a69-485f-8a0d-87022df793ee">
                        <jr:tableHeader height="20" rowSpan="1">
                            <staticText>
                                <reportElement uuid="795dac43-0ff0-482c-89a0-7dac3b27d513" x="0" y="0" width="169" height="20"/>
                                <textElement/>
                                <text><![CDATA[Name]]></text>
                            </staticText>
                        </jr:tableHeader>
                        <jr:detailCell height="20" rowSpan="1">
                            <textField>
                                <reportElement uuid="4f1ab13a-d776-4cd5-a2a7-a5cf23360816" x="0" y="0" width="169" height="20"/>
                                <textElement/>
                                <textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
                            </textField>
                        </jr:detailCell>
                    </jr:column>
                    <jr:column width="173" uuid="a6997eea-131e-4555-80e6-a20d4decb18f">
                        <jr:tableHeader height="20" rowSpan="1">
                            <staticText>
                                <reportElement uuid="5f6e2413-8025-47ca-9638-9609ea13f93f" x="0" y="0" width="173" height="20"/>
                                <textElement/>
                                <text><![CDATA[Age]]></text>
                            </staticText>
                        </jr:tableHeader>
                        <jr:detailCell height="20" rowSpan="1">
                            <textField>
                                <reportElement uuid="195d51a0-9e45-4201-ad67-d3026ce2e72c" x="0" y="0" width="173" height="20"/>
                                <textElement/>
                                <textFieldExpression><![CDATA[$F{age}]]></textFieldExpression>
                            </textField>
                        </jr:detailCell>
                    </jr:column>
                </jr:table>
            </componentElement>
        </band>
    </detail>
</jasperReport>

My POJO:

public class Person {

    private String name;
    private int age;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

构建报告的主类:

public class OpenReport {
    public static void main(String[] args) throws JRException {
        Map<String, Object> peopleMap = new HashMap<>();
        peopleMap.put("Sisco", 17);
        peopleMap.put("Eve", 19);
        peopleMap.put("John", 20);
        peopleMap.put("George", 21);
        peopleMap.put("Steve", 18);

        ArrayList<Person> dataList = new ArrayList<Person>();

        for(Map.Entry<String, Object> personMap : peopleMap.entrySet()) {
            Person person = new Person();
            person.setName(personMap.getKey());
            person.setAge(Integer.valueOf(personMap.getValue().toString()));
            dataList.add(person);
        }

        JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(dataList);
        Map parameters = new HashMap();
        parameters.put("INFO", "Hello");

        JasperReport report = (JasperReport) JRLoader.loadObject("src/test/ireport/ShowPerson.jasper");
        JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameters, beanColDataSource);

        JFrame frame = new JFrame("Report");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(new JRViewer(jasperPrint));
        frame.pack();
        frame.setVisible(true);
    }
}

1.从服务器发送您的数据源作为参数,并用不同的数据源填充报告(可以为空)。

JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(dataList);
        Map parameters = new HashMap();
        parameters.put("INFO", "Hello");
        parameters.put("DS1", beanColDataSource);

        JasperReport report = (JasperReport) JRLoader.loadObject("src/test/ireport/ShowPerson.jasper");
        JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameters, new JREmptyDataSource());

2.在JRBeanCollectionDataSource类型的报告中声明一个新参数

<parameter name="DS1" class="net.sf.jasperreports.engine.JRBeanCollectionDataSource"/>

3.将TableDatasource 设置为使用$P{DS1} 参数。

<jr:table ...>
    <datasetRun subDataset="Table Dataset 1">
        <datasetParameter name="REPORT_DATA_SOURCE">
             <datasetParameterExpression><![CDATA[$P{DS1}]]></datasetParameterExpression>
        </datasetParameter>
    </datasetRun>
.....

4.声明表数据集1中的字段(姓名、年龄)。

5.在表中的 DetailBand 中,在每列中添加一个 TextField 以及相应的字段(分别为 $F{name} 和 $F{age})。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何借助 Table 组件显示 JRBeanCollectionDataSource 数据? 的相关文章

随机推荐

  • 可以将position_jitter与position_dodge结合起来吗?

    我非常喜欢箱线图 其中抖动点覆盖在箱线图上以表示实际数据 如下所示 set seed 7 l1 lt gl 3 1 length 102 labels letters 1 3 l2 lt gl 2 51 length 102 labels
  • Conda 是否取代了 virtualenv 的需求?

    我最近发现Conda在我安装 SciPy 时遇到问题后 特别是在我正在开发的 Heroku 应用程序上 使用 Conda 您可以创建与以下环境非常相似的环境虚拟环境做 我的问题是 如果我使用 Conda 它会取代 virtualenv 的需
  • 根据弹出窗口相对于窗口边缘的 X 位置更改 Bootstrap 弹出窗口的位置?

    我在互联网上进行了广泛的搜索 虽然我发现这篇 stackoverflow 帖子很有洞察力是否可以根据屏幕宽度更改 Bootstrap 弹出窗口的位置 它仍然没有回答我的问题 可能是由于我无法理解位置 偏移 这就是我正在尝试做的事情 我希望
  • 从哪里开始学习 SharePoint 2010?

    我最近开始从事一项新工作 我将使用 Sharepoint 2010 来设置 或实际升级 内部网 不幸的是 我没有使用 SP2010 的经验 上次接触 SP2007 或虚拟服务器 是在四年前 我很快就要参加一门课程 但在那之前我必须让自己变得
  • 当前程序状态寄存器异常模式

    我正在使用具有以下四个汇编指令的代码 CPSR cxsf SPSR cxsf CPSR c SPSR c 我一直很难弄清楚这些异常模式之间的区别 有人可以建议吗 c x s and f指的是状态寄存器的不同部分 c 控制x 延伸s 状态f
  • 如何从 iOS 模拟器获取控制台日志?

    如果我不在 Xcode 中测试应用程序 我想看看 iOS 模拟器中会发生什么 例如 如果我在 Safari 模拟器中打开一个链接 看看控制台中会发生什么 或者 如果我安装网络应用程序 请查看我在控制台中按下的链接 我怎样才能做到这一点 我想
  • NoClassDefFoundError - 拒绝对先前失败的类进行重新初始化

    请有人解释一下这个错误的含义以及如何避免它 一段时间后 我的应用程序由于此错误而强制关闭 09 28 12 53 45 746 I dalvikvm 29489 Rejecting re init on previously failed
  • HttpURLConnection - “https://”与“http://”

    例如 我试图获取用户输入的网址的图标 url google com 我使用 HttpUrlConnection 从 favicon ico主机 URL 的扩展名 String faviconString Uri parse url getH
  • ValueError:必须仅传递带有布尔值的 DataFrame

    Question 在此数据文件中 美国使用 REGION 列分为四个区域 创建一个查询 查找属于区域 1 或 2 名称以 Washington 开头且 POPESTIMATE2015 大于 POPESTIMATE 2014 的县 此函数应返
  • 无法关闭 Windows 10 上的所有 Google Chrome 进程并且无法运行浏览器

    我的症状如下 1 无法运行谷歌浏览器 任务管理器告诉我 RAM 中有一个 chrome exe 任务管理器无法杀死它 2 由于该进程仍在 RAM 中 因此我无法重新安装 Google Chrome 任何帮助深表感谢 您可以使用命令提示符来终
  • 从 Promise 返回一个值

    我想使用这样的 Promise 调用 Google Maps Geocoding API function makeGeoCodingRequest address bounds Input parameters address a str
  • ICollection.包含自定义类型

    如果我有一个 参考 这重要吗 类型MyType这不会覆盖Equals方法 在确定是否存在时将使用什么启发式方法ICollection包含该类型的给定实例 使用我自己的启发法的最佳方法是什么 例如检查Id适当的价值 由于您的类型不会覆盖 Eq
  • 在 SQL Server 中定义一对一关系

    我需要定义一对一的关系 但似乎无法在 SQL Server 中找到正确的方法 您问为什么是一对一的关系 我使用 WCF 作为 DAL Linq 并且有一个包含 BLOB 列的表 BLOB 几乎不会改变 每次查询时传输它都会浪费带宽 我看了一
  • @ElementCollection 与 Map 其中 Entity 是 Embeddable 的字段

    在搜索了 JPA 文档和各种帖子后 我对 JPA2 0 是否可以实现以下操作感到困惑 我刚刚开始使用 JPA 所以如果我做了一些愚蠢的事情 请原谅 我的域模型有一个 投资组合 其中包含零个或多个 未平仓头寸 仓位由 工具 JPA 实体 和价
  • SQL Server 中索引的排序规则

    我感兴趣的是 在创建与该列的排序规则不同的索引时是否可以为该列指定排序规则 当建立索引时 字符串数据是根据列的排序规则还是数据库的排序规则排序 您可以使用所需的排序规则创建计算字段 并在此字段上创建索引
  • 在对象数组中添加匹配键的值

    我有一个数组 其中包含许多具有匹配键的对象 a 2 b 5 c 6 a 3 b 4 d 1 a 1 d 2 我想循环遍历数组 如果键匹配 我想将每个键的结果相加 并返回一个包含每个键之和的对象 i e a 6 b 9 c 6 d 3 我目前
  • 有没有办法在 EmberJS 中将数组传递给 currentWhen ?

    我试图使链接在多个路由上保持 活动 状态 例如 users 和 user 有任何想法吗 您可以重新打开 Ember 的 LinkView 并执行类似的操作 允许 currentWhen 包含空格分隔值 Ember LinkView reop
  • 如何使用 jQuery 更改 css 类规则?

    任何人都可以帮助我吗 我的问题有两个部分 我想做的是使用 jQuery 动态更改 css 类规则 classname color red font size 14px 在上面的示例中 我有一个名为 classname现在使用 jQuery
  • 如何在 mongoDB 中对 $lookup 结果应用条件?

    参考我之前的问题 我有一个关于 lookup 的问题 并添加一些条件 您可以从下面的链接描述中获得有关问题的足够参考 Photo id 1 photo name 1 jpg photo description description 1 a
  • 如何借助 Table 组件显示 JRBeanCollectionDataSource 数据?

    我需要在表组件 JasperReports 中显示 JRBeanCollectionDataSource 数据 这是我的模板 ShowPerson jrxml 文件