近来要给客户做子报表,采用之前的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类型了。
好了,如果大家还有什么问题可以给我留言
分享到:
相关推荐
Struts2、JasperReport 和 iReport 是开发Web报表应用中的常用技术栈。本文主要针对使用Struts2框架结合JasperReport5.0与iReport5.0进行报表开发时可能遇到的问题进行总结。 1. **报表预览问题**: - 数据源为空...
4. 设置父报表及子报表数据源:最后,我们需要设置父报表及子报表的数据源,通过 Parameters 和 Data Source Expression 来实现。 iReport 子报表技术的应用 iReport 子报表技术可以应用于各种复杂的报表设计,...
在IT行业中,报表设计是数据分析和业务展示的重要环节,而iReport是一款强大的开源报表设计工具,它支持多种复杂的报表布局,包括多级报表。本文将深入探讨如何在iReport中利用$P{SUBREPORT_DIR}参数来实现多级报表...
Struts2+iReport3.7.2报表基本应用是一个典型的Java Web开发中的报表生成场景,主要涉及两大核心技术:Struts2作为MVC框架处理前端请求和业务逻辑,iReport作为一个强大的报表设计工具,用于创建复杂的报表模板。在...
本篇文章将专注于如何在IReport中使用子报表,并结合JavaBean集合作为数据源来生成报告。 首先,理解`子报表`的概念。子报表是报表中的一个区域,它可以独立设计并重复显示主报表中的数据。这样可以将复杂报表拆分...
在实际应用中,你可能需要结合子报表和行合并功能,例如在一个主报表中展示多个产品的销售数据,并在每个产品下面显示详细的订单行,同时对某些列进行行合并以优化显示效果。 以“MySubReport”为例,这个文件可能...
使用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中创建子报表,这在处理大型复杂报告时非常有用,因为子报表能够将大报告分解为更小、更易于管理的部分。 首先,你需要下载并安装Ireport软件。安装完成后,打开Ireport IDE,...
- 在子报表组件的属性中,找到“Expression”字段,这将用于传递值给子报表的参数。 - 将 Expression 的值改为需要传递给子报表的实际值,例如,可能是一个相对路径或者一个具体的目录字符串,如 `".\\"`。 - ...
Struts2和iReport的结合,通常用于将数据库中的数据以报表的形式展示在Web页面上,为用户提供数据可视化的功能。 描述中提到"包含LIB ireport jasperreport Struts2 数据库 连接ORACL",这意味着我们需要关注以下几...
在Struts2中集成iReport,可以实现从数据库或其他数据源获取数据,然后以PDF格式展示给用户,这对于企业级应用来说非常重要,因为PDF报表通常用于打印、保存和分发,确保数据的一致性和完整性。 **Struts2的配置** ...
在本篇内容中,我们将探讨如何在ireport中利用javabean作为数据源来开发基于JasperReports的报表。 首先,了解JasperReports和iReport的基础概念。JasperReports是一个用Java编写的开源报表库,它允许开发者创建...
6. **错误处理**:在开发过程中,可能会遇到如报表模板编译错误、数据源问题等异常,需要进行适当的错误处理和日志记录。 在“demo”这个压缩包文件中,可能包含了 SpringMVC 与 iReport 集成的示例代码、预定义的...
Struts和iReport是两种广泛应用于Java Web开发的技术。Struts是一种基于MVC(Model-View-...总的来说,Struts和iReport的结合使得开发者能够方便地在Web应用中实现强大的报表功能,提供丰富的数据展示和导出选项。
通过以上步骤,我们可以实现iReport中的主报表向子报表传递参数,从而实现动态的、基于参数的报表数据展现。在实际操作中,可能还会遇到如默认值设定、参数验证等更复杂的情况,但基本的传递流程和上述要点是不变的...
在实际应用中,结合Struts2、Javabean和iReport,你可以实现用户在Web界面上请求报表,后台服务通过Struts2框架处理请求,调用JDBC或ORM框架(如Hibernate)从数据库获取数据,将数据封装成Javabean集合,然后使用...
如果使用独立的数据源,需要在子报表中设置新的连接或查询。 四、`SpringMVC`中的报表生成 在`SpringMVC`中,我们需要一个控制器方法来处理报表生成的逻辑: ```java @GetMapping("/generateReport") public void ...
- 在Struts2的Action类中,编写方法来加载报表模板,执行SQL查询,填充数据,然后生成报表。 - 使用Struts2的Result类型,如stream或freemarker,将报表以流形式发送到客户端浏览器。 4. 示例代码: 一个简单的...