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

时间:2016-01-04 06:24:48

标签: java jasper-reports

我正在尝试将作为参数传递的HashMap的值迭代到jrxml,在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?

2 个答案:

答案 0 :(得分:1)

您可以使用

创建一个包含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

答案 1 :(得分:0)

我用这种方式将参数传递给我的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报告的IDE来制作您想要的报告,然后尝试传递您想要的参数。