当前位置: 首页 > 知识库问答 >
问题:

如何将Java bean属性映射到报告部件字段?

欧阳斌
2023-03-14

我试图在我的Jasper报告中实现目录。以下是Jasper Reports网站上提供的一个如何实现该操作的示例:https://sourceforge.net/p/jasperReports/code/ci/jr-6-2-1/tree/jasperReports/demo/samples/tableofcontents/Reports/

在上面的示例中,它们对数据库运行一个查询,以获取数据来填充报表部分*。在我的例子中,我需要用从JavaBean获得的数据填充报表部分,但我找不到解决方案。

我知道如何将数据源作为参数从包装报表传递到报表部件,但我不知道如何在那里使用它,以便所有报表部件字段都映射到它。定期(没有报告部分),据我所知,它是自动完成的。

到目前为止我所做的:

    null
JasperCompileManager.compileReportToFile("TablePart.jrxml", "TablePart.jasper");
JasperReport jasperReport = JasperCompileManager.compileReport("TableOfContentsReport.jrxml");
JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(generateBeanList());
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, new HashMap<>(), dataSource);
JasperExportManager.exportReportToPdfFile(jasperPrint, "TableOfContentsReport.pdf");
public class MyBean {

    private Integer orderId;
    private String shipName;
    private String shipCity;
    private String shipCountry;
    private Integer total;

    public Integer getOrderId() {
        return orderId;
    }

    public void setOrderID(Integer orderId) {
        this.orderId = orderId;
    }

    public String getShipName() {
        return shipName;
    }

    public void setShipName(String shipName) {
        this.shipName = shipName;
    }

    public String getShipCity() {
        return shipCity;
    }

    public void setShipCity(String shipCity) {
        this.shipCity = shipCity;
    }

    public String getShipCountry() {
        return shipCountry;
    }

    public void setShipCountry(String shipCountry) {
        this.shipCountry = shipCountry;
    }

    public Integer getTotal() {
        return total;
    }

    public void setTotal(Integer total) {
        this.total = total;
    }
}
<jasperReport ... sectionType="Part" ...>
    <group name="dummy">
        <groupExpression><![CDATA[]]></groupExpression>
        <groupHeader>
        ...
            <part>
                <p:subreportPart xmlns:p="http://jasperreports.sourceforge.net/jasperreports/parts"                            xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/parts http://jasperreports.sourceforge.net/xsd/parts.xsd"
                                 usingCache="true">
                    <subreportParameter name="REPORT_DATA_SOURCE">
                        <subreportParameterExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></subreportParameterExpression>
                    </subreportParameter>
                    <subreportExpression><![CDATA["TablePart.jasper"]]></subreportExpression>
                </p:subreportPart>
            </part>
        </groupHeader>
    </group>
</jasperReport>
<jasperReport ...>
    <queryString><![CDATA[]]></queryString>
    <field name="orderId" class="java.lang.Integer"/>
    <field name="shipName" class="java.lang.String"/>
    <field name="shipCity" class="java.lang.String"/>
    <field name="shipCountry" class="java.lang.String"/>
    ...
</jasperReport>

*以防万一,下面是关于报表部件主题的参考:http://jasperreports.sourceforge.net/sample.reference/book/index.html

共有1个答案

澹台正真
2023-03-14

问题是传递给子报表的数据源已经被使用。

JRDatasource使用next来迭代主报表中的详细信息带,并在最后将其传递给子报表。

解决方案:

>

  • 向主报表传递新JREmptyDataSource(1),只需要1条记录

    HashMap esMap.put(“SubreportDataSource”,datasource)中将数据源作为参数传递

    传递子报告此数据源

    <subreportParameter name="REPORT_DATA_SOURCE">
       <subreportParameterExpression><![CDATA[$P{subreportDataSource}]]></subreportParameterExpression>
    </subreportParameter>
    

    是否可以在所有报表部分之间共享一个数据源?

    不直接作为datasource传递,但在您的示例中,可以将generateBeanList()作为参数map.put(“dsList”,generateBeanList())传递给每个子报表,然后传递new JRBeanCollectionDataSource($p{dsList})

  •  类似资料:
    • 我需要将源类中的字段值映射到字段属性。我可以使用Mapstruct使用@mapper注释的'expression'参数来完成 有没有其他方法可以不使用“表达式”来进行映射?

    • 在我的数据库表中,我有一个列,它的内容可以是Y或N(CHECK约束)。我在Java中定义了一个String属性,在我的类中定义了一个基于String的setter。此外,为了方便起见,我添加了一个带有布尔参数的setter/getter。 那么,Hibernate基于什么属性进行映射呢?方法名称?参数名称?参数类型?在setter中使用可以吗?如果我的属性的名称与表列的名称不同,这会有什么不同吗?

    • MapStrut的新成员;对象到字符串错误: [错误] /util/LicenseMapper.java:[11,23]无法映射属性" Java . lang . object license . custom fields[]。值" to " Java . lang . string license . custom fields[]。值”。考虑声明/实现一个映射方法:“Java . lang

    • 我在mapstruct映射器上遇到了问题。当运行mvn clean install(或mvn clean compile)时,我会得到以下错误: 问题是我不知道mapstruct从哪里获得这个“java.lang.Integer Architecture.Loads”。我不明白这个整数是从哪里来的,正如您在我的代码中看到的,没有整数。而且,到目前为止,我在使用类似的映射器时从未遇到过这个错误。 下

    • 问题内容: 考虑以下类别: 映射到“订单”表。是否可以通过外键关系将客户名属性映射到客户表? 问题答案: 是的,您可以为此使用联接映射元素。另一种选择是映射视图而不是表。但是,如果可能的话,您应该采用面向对象的方法,并绘制订单和客户之间的多对多关系。

    • 问题内容: 我正在使用Tire进行elasticsearch。在我的应用程序中,我有2个模型。价格和产品。 我正在尝试搜索我的Price类,并在搜索字段中使用它所属的产品的属性。现在,如果我有一个名为的产品,并输入“ pro”,“ prod”或“ duct”,则没有结果。但是键入“产品”或“产品”会显示结果。我相信问题出在我的地图上。我查看了查询及其: 我认为应该是: 从以下问题 我不知道该如何使