Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将JavaBean属性映射到报告部件字段?_Java_Jasper Reports_Subreport - Fatal编程技术网

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

如何将JavaBean属性映射到报告部件字段?,java,jasper-reports,subreport,Java,Jasper Reports,Subreport,我试图在我的Jasper报告中实现目录。以下是Jasper Reports网站上提供的一个示例,介绍了如何做到这一点: 在上面的示例中,他们对db运行一个查询,以获取填充报告部分*的数据。在我的例子中,我需要用从JavaBean获得的数据填充报告部分,但我找不到解决方案 我知道如何将数据源作为参数从包装报表传递到报表部件,但我不知道如何在那里使用它,以便所有报表部件字段都映射到它。据我所知,定期(无报告部分)是自动完成的 到目前为止我所做的: 创建报告的Java代码: jaspecompilem

我试图在我的Jasper报告中实现目录。以下是Jasper Reports网站上提供的一个示例,介绍了如何做到这一点:

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

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

到目前为止我所做的:

  • 创建报告的Java代码:
  • jaspecompilemanager.compileReportToFile(“TablePart.jrxml”、“TablePart.jasper”);
    JasperReport-JasperReport=jaspecompilemanager.compileReport(“TableOfContentsReport.jrxml”);
    JRBeanCollectionDataSource=新的JRBeanCollectionDataSource(generateBeanList());
    JasperPrint-JasperPrint=JasperFillManager.fillReport(jaspereport,newhashmap(),dataSource);
    exportreportmanager.exportreporttopffile(jasperPrint,“TableOfContentsReport.pdf”);
    
  • 爪哇豆
  • 公共类MyBean{
    私有整数orderId;
    私有字符串shipName;
    私人城市;
    私人船舶国家;
    私有整数合计;
    公共整数getOrderId(){
    返回订单ID;
    }
    公共void setOrderID(整数orderId){
    this.orderId=orderId;
    }
    公共字符串getShipName(){
    返回船名;
    }
    public void setShipName(字符串shipName){
    this.shipName=shipName;
    }
    公共字符串getShipCity(){
    回归城市;
    }
    公共无效设置发货城市(字符串发货城市){
    this.shipCity=shipCity;
    }
    公共字符串getShipCountry(){
    返回国家;
    }
    公共发货国(字符串发货国){
    this.shipCountry=shipCountry;
    }
    公共整数getTotal(){
    返回总数;
    }
    公共void集合总计(整数总计){
    这个.总计=总计;
    }
    }
    
  • 包装报告jrxml模板(稍微修改了TableOfContentsReport.jrxml的版本(上面的链接)):
  • 
    ...
    
    我发现可以将数据源作为参数从包装报告传递到报告部分:$p{report_DATA_SOURCE}

    但是我如何在报告部分使用它来映射相应的字段(Jasper报告字段到JavaBean字段)?现在的情况是,报告部分中所有声明的字段都计算为null

  • 报告部分(TablePart.jrxml的稍微修改版本(上面的链接))
  • 
    ...
    
    这些是我需要用传递的JavaBean的相应值设置的字段(orderId、shipName等)


    *为了以防万一,这里有一个关于报表部分主题的参考:

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

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

    解决方案:

  • 传递到主报告a
    新JREPTYDATASOURCE(1)
    ,只需要一条记录

  • 将数据源作为参数传递到
    HashMap
    es
    map.put(“subreportDataSource”,datasource)

  • 传递到此数据源的子报表

    <subreportParameter name="REPORT_DATA_SOURCE">
       <subreportParameterExpression><![CDATA[$P{subreportDataSource}]]></subreportParameterExpression>
    </subreportParameter>
    
    
    
  • 跟进问题

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


    不是直接作为数据源,但在您的情况下,您可以将
    generateBeanList()
    作为参数
    map.put(“dsList”,generateBeanList())
    传递给每个子报表,然后传递给新的JRBeanCollectionDataSource($p{dsList})

    您试图实现的目标有点不清楚,您使用的示例使用来自另一个报表的数据源来生成TOC,您想传递自己的数据源吗?作为参数?,但您要将其作为常规数据源传递。是的,这些字段需要映射到java bean中的getter和setter…因此有很多问题需要解决,我们没有关于您的bean的信息,我会尝试编辑问题以反映您正在尝试实现什么,您当前得到什么,而不是如何适应一个示例。是的,我正在尝试传递我自己的数据源(java bean)到报告部分。对于TOC示例(上面的链接),其中有3个jrxml模板:TableOfContentsReport.jrxml、TablePart.jrxml和TocPart.jrxml,我需要用我的Java bean列表中的数据填充TablePart.jrxml部分。但无论我做什么,这部分中的字段(TablePart.jrxml)都不会使用传递的数据源(JavaBean)。所有报表部分字段的计算结果都为空。我在问题中添加了JavaBean。它很有效,非常感谢!但我仍然想知道,是否有可能在所有报表部分之间共享一个数据源,以便所有报表部分的所有字段都自动映射(按名称约定)到相应的JavaBean属性?