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

如何将JR Bean数据源只传递给子报表而将JREmptyData源传递给主IReport

闻人宏盛
2023-03-14
   <subreport>
                    <reportElement uuid="0db7b8b7-9cf5-41fc-b271-ffb6333c80f3" x="129" y="30" width="200" height="100"/>
                    <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{dataBeanList})]]></dataSourceExpression>
                    <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "subreport1.jasper"]]></subreportExpression>
                </subreport>
   try
        {

             Map<String, Object> parameters = new HashMap<String, Object>();

            newpdftemplate newpdftemplate = new newpdftemplate();
            ArrayList<usingbean> dataBeanList = newpdftemplate.getDataBeanList();

            JRBeanCollectionDataSource beanColDataSource = new
            JRBeanCollectionDataSource(dataBeanList);
jasperDesign = JRXmlLoader.load("D:/workspace/itxtgraph/jrxml/FirstReport.jrxml");
        jasperReport = JasperCompileManager.compileReport(jasperDesign);
parameters.put("SUBREPORT_DIR", "D:/workspace/itxtgraph/jrxml/");
         jasperPrint = JasperFillManager.fillReport(jasperReport,parameters, new JREmptyDataSource());
        JasperExportManager.exportReportToPdfFile(jasperPrint,
        "D:/workspace/itxtgraph/report/SecondReport.pdf");
        response.setContentType("application/pdf");
}
 13 Nov, 2013 4:44:31 PM net.sf.jasperreports.engine.fill.JRFillSubreport prepare
SEVERE: Fill 1: exception
net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : 
    at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:123)
    at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getFieldValue(JRAbstractBeanDataSource.java:96)
    at net.sf.jasperreports.engine.data.JRBeanCollectionDataSource.getFieldValue(JRBeanCollectionDataSource.java:100)
    at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:1331)
    at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1232)
    at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1208)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1577)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:149)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:932)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:864)
    at net.sf.jasperreports.engine.fill.JRFillSubreport.fillSubreport(JRFillSubreport.java:655)
    at net.sf.jasperreports.engine.fill.JRSubreportRunnable.run(JRSubreportRunnable.java:59)
    at net.sf.jasperreports.engine.fill.AbstractThreadSubreportRunner.run(AbstractThreadSubreportRunner.java:203)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.NoSuchMethodException: Unknown property '' on class 'class itxtgraph.usingbean'
    at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1313)
    at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:762)
    at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:837)
    at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:426)
    at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:111)
    ... 15 more

共有1个答案

浦德义
2023-03-14

您需要将子报表数据源作为参数而不是字段传递给主报表。

Java:

...
Map<String, Object> parameters = new HashMap<String, Object>();
newpdftemplate newpdftemplate = new newpdftemplate();
ArrayList<usingbean> dataBeanList = newpdftemplate.getDataBeanList();
JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(dataBeanList);
parameters.put("subReportDataSource", beanColDataSource);
...

JRXML:

...
<parameter name="subReportDataSource" class="net.sf.jasperreports.engine.JRDataSource"/>
...
<subreport>
    <reportElement uuid="0db7b8b7-9cf5-41fc-b271-ffb6333c80f3" x="129" y="30" width="200" height="100"/>
    <dataSourceExpression><![CDATA[$P{subReportDataSource}]]></dataSourceExpression>
    <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "subreport1.jasper"]]></subreportExpression>
</subreport>
...
 类似资料:
  • 我正在从 JRBeanCollectionDataSource 生成报告。此报告是关于客户的订单的。 这是我的代码 当客户时,需要生成包含客户详细信息和客户订单列表的报告。由于接受一个集合,这就是我所做的。 如何提取< code>Customer中的< code>CustomerOrder列表并将其作为子报表传递?

  • 我需要您的帮助,将csv数据源传递给subReports。 我将非常感谢您的建议或解决方案。 我使用的是iReport 5.0专业版。 我有一个非常复杂的报告,该报告从多个(大约10个)csv文件中获取数据。 我已经为报告的每个部分创建了子报告,每个子报告作为一个单独的报告运行良好。 但是当我尝试将所有子报表集成到主报表中时,我无法将数据源传递给子报表。 在Main报告中,我创建了一个名为CSVD

  • 我想使用不同项目的jasper报告生成一个账单。为此,我定义了一些字符串数组,希望在账单中显示为项目列表。 我填写jasper报告的代码如下 Sling数组用于填充ArrayList,这些ArrayList被传递到HashMap以填充我的报告。HasMap键是在文件中声明Invoice.jrxml参数名称。参数名称被赋予如下文本文件 我想打印项目列表,但我得到的输出是单行逗号分隔值。 此处为示例输

  • 在我的Spring Boot应用程序中,我想审计DTO而不是实体,并将审计逻辑移动到公共库中,公共库将具有@Enable审计注释以在方法级别审计DTO。如果我使用JaversBuilder.javers(). build();在公共库中,我将无法提交数据,因为它对数据源一无所知。 我想在我的应用程序中创建Javers实例,并将数据源传递给它,然后将Javers实例传递给公共库以执行提交。在Spri

  • 问题内容: 我正在尝试从SQL导出到.csv,如果我对其进行硬编码以接受一定数量的参数,则它可以正常工作。问题是,我想允许用户请求任意数量的参数,并将它们传递给where子句。该代码应该使这一点更加清楚。 所以我想我要做的是将列表传递给where子句,而不是显式的:dates#变量。例如,一个人可以使用参数“ 2012-01-0412:00、2012-02-04 12:00、2012-03-04

  • 问题内容: 我正在A中使用RUN指令安装rpm 但是,我想将值“ 2.3”作为参数传递。我的RUN指令应类似于: 哪里 问题答案: 您正在寻找和指导。这些是Docker 1.9中的新功能。查看https://docs.docker.com/engine/reference/builder/#arg。这将允许您添加到,然后使用构建。