如何在jrxml中迭代HashMap(Arraylist)?

How to iterate HashMap(Arraylist) in jrxml?

我正在尝试迭代作为参数传递给 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 报告 jrxml 中迭代这些 List

我用这种方式给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上试一下,把report做成你想要的样子,然后再尝试传递你想要的参数。

您可以使用

使用 jasper 报告创建新数据源
new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{severity})

此数据源可用于 子报表 作为 dataSourceExpression:

<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 原始类型 (String) 以直接访问它,您需要使用此字段描述

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

有关详细信息,请参阅此内容:Passing the List of primitive type objects as datasource for subreport