【问题标题】:How to iterate HashMap(Arraylist) in jrxml?如何在 jrxml 中迭代 HashMap(Arraylist)?
【发布时间】:2016-07-04 03:58:16
【问题描述】:

我正在尝试迭代作为参数传递给 jrxml 的 HashMap 的值,在 HashMap 中,这些值作为 List 传递。

例子

List<String> severity = // some values;
List<String> messages = // some values;

LinkedHashMap parameters = new LinkedHashMap();
parameters.put("severity", severity);
parameters.put("messages", messages);

jPrint = JasperFillManager.fillReport(jasperreport,parameters,new JREmptyDataSource());     
JasperExportManager.exportReportToPdfStream(jPrint,baos);  

如何在 jasper 中迭代这些 List 报告 jrxml?

【问题讨论】:

    标签: java jasper-reports


    【解决方案1】:

    您可以使用 jasper 报告创建新数据源

    new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{severity})
    

    此数据源可用于 subreportdataSourceExpression:

    <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{severity})]]></dataSourceExpression>
    

    或在jr:tablejr:list 组件中使用 subDataset

    <datasetRun subDataset="listDs" uuid="99b1de41-5185-4b8f-9cfe-011e7b4cf22d">
       <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{severity})]]></dataSourceExpression>
    </datasetRun>
    

    请注意,由于您的 Bean 是 java 原始类型(字符串),要直接访问它,您需要使用此字段描述

    <field name="_THIS" class="java.lang.String"/>
    

    更多信息请参见:Passing the List of primitive type objects as datasource for subreport

    【讨论】:

      【解决方案2】:

      我使用这种方式将参数传递给我的jasper。

      Map parameters = new HashMap();
      // idProd is the name of the parameter in my file .jrxml
                  parameters.put("idProd", product.getProductId());
      // reportPath is the direction of the .jasper file.
      // dataSource is my db conection.
                      jasperPrint = JasperFillManager.fillReport(reportPath, parameters, dataSource.getConnection());
      

      编辑: 嗯,您想按组进行报告吗?例如。

      或许多单独的报告?在这种情况下,您应该重新考虑 jrxml 文件的结构。

      另外你应该先在jasper report的IDE上尝试一下,让报表如你所愿,然后尝试传递你想要的参数。

      【讨论】:

      • 我在 jrxml 中添加了参数,但是如何在 jrxml 中迭代这些参数?我正在尝试迭代 jrxml 中的严重性和消息参数?
      • &lt;parameter name="severity" class="java.util.ArrayList"&gt;&lt;/parameter&gt;
      • 并在 textField 中我添加了 -------
      • 但它不起作用所以如何迭代 jrxml 中的严重性列表?
      • 在这种情况下,您应该使用子报表并将 ArrayList 作为 DataSourceExpression 传递
      猜你喜欢
      • 1970-01-01
      • 2016-09-08
      • 2011-12-02
      • 2011-01-08
      • 2017-11-01
      • 2021-07-31
      • 1970-01-01
      • 1970-01-01
      • 2014-10-19
      相关资源
      最近更新 更多