我正在尝试将作为参数传递的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?
答案 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:table
,jr:list
组件
<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来制作您想要的报告,然后尝试传递您想要的参数。