近来要给客户做子报表,采用之前的jasper+ireport来开发,结果发现子报表上数据源是个问题,查了很多技术文章,却被难在了new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{addresses}) 上,发现很多人和我一样,无法解决这个报错问题,好象是只有在struts2应用中才出这个问题。由是搞了一整天,最终得到了一个解决方法,如下:
setJasperName("deomReport");
List slist1=new ArrayList();
OrderedMap srow = new LinkedMap();
srow.put("zip", "100000");
srow.put("address", "北京市**********");
srow.put("email", "emailname@mailserver.com");
slist1.add(srow);
List slist2=new ArrayList();
srow = new LinkedMap();
srow.put("zip", "310012");
srow.put("address", "杭州**********");
srow.put("email", "emailname@mailserver.com");
slist2.add(srow);
OrderedMap row = new LinkedMap();
row.put("name", "徐翔");
row.put("duty", "软件工程师");
row.put("age", 33);
row.put("addressList", new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(slist1));
list.add(row);
row = new LinkedMap();
row.put("name", "陈文平");
row.put("duty", "软件工程师");
row.put("age", 24);
row.put("addressList", new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(slist2));
list.add(row);
reportParameters.put("SUBREPORT_DIR", "E:\\\\workspace\\demo\\struts2.1.8.1\\WebRoot\\cn\\com\\jandar\\jasper\\demo\\");
reportParameters.put("TITLE", "子报表演示样例");
return "pdf";
<action name="subReport" class="cn.com.jandar.jasper.demo.JasperReportDemo" method="subReport">
<!-- 报表返回设定 -->
<result name="pdf" type="jasper">
<param name="location">
/cn/com/jandar/jasper/demo/${jasperName}.jasper
</param>
<param name="imageServletUrl">/cn/com/jandar/jasper/demo/images/</param>
<param name="dataSource">list</param>
<param name="format">PDF</param>
<param name="documentName">subReportPDF</param>
<param name="reportParameters">reportParameters</param>
</result>
</action>
在主报表中添加参数addresslist,并且通过参数属性界面更改参数类型(默认为String类型的),更改为java.lang.Object
打开在主报表中添加的子报表控件的属性面板,查看connection type 属性,选择Use a datasource expression 选项
打开在主报表中添加的子报表控件的属性面板,查看Data Source Expression属性,填写$F{addressList}
这样,子报表中可以得到addressList这个数据源,整个关键在于
row.put("addressList", new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(slist2));
放进主报表数据源的时候要已经是JRBeanCollectionDataSource类型了。
好了,如果大家还有什么问题可以给我留言
分享到:
相关推荐
struts jasperreport ireport5.0 字报表数据传递 子报表路径问题 中文问题
ireport子报表嵌套.doc,文档主要描述了,ireport如何通过子报表技术实现一对多行数据展示问题
使用ireport和struts2进行报表设计的简单示例,生成普通报表和饼图、柱状图。java工程的lib里包含丰富的jar包,且很多都是从各个网站下载的最新版本,文件夹内还包含一些ireport和jasperreport文档,适合刚入门学习...
iReport 报表、子报表、主从报表、合计、实例解析1. 开发使用步骤(iReport4.1)... 2 4.1. JasperReport 和iReport的介绍... 2 4.1.1. JasperReport 简介... 3 4.1.2. iReport 简介... 3 4.1.2.1. iReport几个重要...
IREPORT使用JAVABEAN作为报表数据源IREPORT使用JAVABEAN作为报表数据源IREPORT使用JAVABEAN作为报表数据源
ireport+jasperreport 子报表实现行合并实例
NULL 博文链接:https://zhb01.iteye.com/blog/668921
NULL 博文链接:https://sunnymod.iteye.com/blog/815330
Ireport 用子报表调用交叉报表,有问题可留言!
NULL 博文链接:https://stone-1231.iteye.com/blog/813953
Struts2+ireport配置生成PDF报表
关于ireport交叉报表的一些信息,里面描述了用ireport 怎样制作交叉报表。
ireport4.5.1制作报表、子报表的完整过程
Struts2.0+JasperReport+IReport+Oracle 报表开发 整个项目打包上传,用MyEclipse导入即可调试使用 含报表文件、数据库表结构及测试数据,项目中解决了PDF中文不显示问题
ireport 子报表例子
springMVC + ireport子报表(含jar包)
ireport制作子报表,springmvc
struts+ireport报表在页面显示,导出 word \excel\pdf格式 报表的打印 经过测试绝对没问题,
Struts2.0+JasperReport+IReport+Oracle 报表开发 整个项目打包上传,用MyEclipse导入即可调试使用 含报表文件、数据库表结构及测试数据,项目中解决了PDF中文不显示问题
自己做的,例子包含数据,导入oracle就可。调试的时候,改一下连接的数据库。就可看到效果。可实现模糊查询,颜色隔行显示以及如何传参到JasperServer等等。