java ireport 子报表_ireport向子报表传递参数详解

"本文详细介绍了如何在 Spring MVC 项目中利用 JasperReports 和 iReport 设计报表模板,并向子报表传递 Map 类型参数。通过在 Parameters 中添加参数,设置子报表属性以及 DataSourceExpression,成功解决了向子报表传递 List 类型数据的问题。在实际操作中,遇到了$P{subMap}
摘要由CSDN通过智能技术生成

最近些日子一直在研究报表生成的模块,用的是jasperreport,用ireport来设计报表模板,涉及到后台像子报表传递参数。

后台采用的是springmvc+spring+spring data jpa,

在后台向子报表传递map参数时的步骤是:

1.在Parameters添加一个同后台传递到子报表map同名的parameter

408b6c96c9e6292590fd693e90d2e99b.png

2.设置subMap的属性

dfe35623689015d73cb9593b8df5a001.png

3.设置子报表的属性

Parameters Map Expression属性填写$P{subMap},

(tips:此项只能用来向子报表传递普通的参数,比如string类型参数subparam)

Map subMap = new HashMap();

subMap.put("subparam", "subparam display");

Connection type属性选择Use a datasource expression

(tips:此项向子报表传递数据集,即List类型等可迭代的集合类型参数)

然后再Data Source Expression中填写

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

.get("persons1"))

我的后台代码是

Map mainMap = new HashMap();

List persons1 = (new PersonsFactory()).getPersons();

subMap.put("persons1", persons1);

mainMap.put("subMap", subMap);

814113bfb43e8dc9761ee8c5e09d44ad.png

其中困扰了我很久的一点就是,按照高洪岩写的《Jasperreports + ireport报表开发详解》书中data source expression属性填写的格式为

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{subMap}.get("persons1"))

如此填写的后果实jasper文件编译无法通过,会报错

6c2c337559ebddbc592a882e345f09fe.png

说object类型没有get()方法,而且Parameters参数类型中没有map类型,

20c810b9aa19a63d4501ae95cc4730c7.png

只能选择父类型object,所以我把Object参数$P{subMap}强制转换为Map,再去获取其中的List,

((Map)$P{subMap}).get("persons1")

编译不报错,成功编译完成,

52256c56353f6ec21bda082404e08c14.png

子报表map中List也可以正常传递显示。

92303ef3dea5e080fbdae6cd659410bf.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值