`
china_xuxiang
  • 浏览: 2592 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类

在struts2应用中,关于Ireport子报表$F(XXX)作为数据源问题的解决方法

阅读更多
近来要给客户做子报表,采用之前的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类型了。
    好了,如果大家还有什么问题可以给我留言
    2
    3
    分享到:
    评论
    5 楼 chenxf84 2016-09-05  
    我这里还是不行,如果不是LinkedMap而是另外一个javabean呢?
    4 楼 yonglongwang 2015-03-01  
    chenming142 写道
       果然可以通过,谢谢了

    3 楼 chenming142 2015-03-01  
       果然可以通过,谢谢了
    2 楼 actuutuu 2014-03-24  
    set集合可以用吗?
    1 楼 laptop 2011-11-04  
    代码能共享下吗,虽然看了你的帖子,不过还是没弄出来, 
    我邮箱:zhazhijun@163.com

    相关推荐

      struts2+jasperReport+ireport做报表总结

      Struts2、JasperReport 和 iReport 是开发Web报表应用中的常用技术栈。本文主要针对使用Struts2框架结合JasperReport5.0与iReport5.0进行报表开发时可能遇到的问题进行总结。 1. **报表预览问题**: - 数据源为空...

      ireport子报表嵌套

      4. 设置父报表及子报表数据源:最后,我们需要设置父报表及子报表的数据源,通过 Parameters 和 Data Source Expression 来实现。 iReport 子报表技术的应用 iReport 子报表技术可以应用于各种复杂的报表设计,...

      ireport 多级报表 $P{SUBREPORT_DIR}参数的使用

      在IT行业中,报表设计是数据分析和业务展示的重要环节,而iReport是一款强大的开源报表设计工具,它支持多种复杂的报表布局,包括多级报表。本文将深入探讨如何在iReport中利用$P{SUBREPORT_DIR}参数来实现多级报表...

      struts2+ireport3.7.2 报表基本应用

      Struts2+iReport3.7.2报表基本应用是一个典型的Java Web开发中的报表生成场景,主要涉及两大核心技术:Struts2作为MVC框架处理前端请求和业务逻辑,iReport作为一个强大的报表设计工具,用于创建复杂的报表模板。在...

      ireport(使用子报表(使用JavaBean集合作为数据源))

      本篇文章将专注于如何在IReport中使用子报表,并结合JavaBean集合作为数据源来生成报告。 首先,理解`子报表`的概念。子报表是报表中的一个区域,它可以独立设计并重复显示主报表中的数据。这样可以将复杂报表拆分...

      ireport 子报表,行合并实例

      在实际应用中,你可能需要结合子报表和行合并功能,例如在一个主报表中展示多个产品的销售数据,并在每个产品下面显示详细的订单行,同时对某些列进行行合并以优化显示效果。 以“MySubReport”为例,这个文件可能...

      struts2+ireport+jasperreport报表设计简单示例

      使用ireport和struts2进行报表设计的简单示例,生成普通报表和饼图、柱状图。java工程的lib里包含丰富的jar包,且很多都是从各个网站下载的最新版本,文件夹内还包含一些ireport和jasperreport文档,适合刚入门学习...

      iReport 报表、子报表、主从报表、合计、实例解析

      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软件。安装完成后,打开Ireport IDE,...

      Ireport 用子报表调用交叉报表

      - 在子报表组件的属性中,找到“Expression”字段,这将用于传递值给子报表的参数。 - 将 Expression 的值改为需要传递给子报表的实际值,例如,可能是一个相对路径或者一个具体的目录字符串,如 `".\\"`。 - ...

      Ireport4集成Struts2

      Struts2和iReport的结合,通常用于将数据库中的数据以报表的形式展示在Web页面上,为用户提供数据可视化的功能。 描述中提到"包含LIB ireport jasperreport Struts2 数据库 连接ORACL",这意味着我们需要关注以下几...

      Struts2+ireport PDF报表

      在Struts2中集成iReport,可以实现从数据库或其他数据源获取数据,然后以PDF格式展示给用户,这对于企业级应用来说非常重要,因为PDF报表通常用于打印、保存和分发,确保数据的一致性和完整性。 **Struts2的配置** ...

      图示ireport中使用javabean作数据源开发基于jasperreports报表过程

      在本篇内容中,我们将探讨如何在ireport中利用javabean作为数据源来开发基于JasperReports的报表。 首先,了解JasperReports和iReport的基础概念。JasperReports是一个用Java编写的开源报表库,它允许开发者创建...

      springMVC + ireport子报表(含jar包)

      6. **错误处理**:在开发过程中,可能会遇到如报表模板编译错误、数据源问题等异常,需要进行适当的错误处理和日志记录。 在“demo”这个压缩包文件中,可能包含了 SpringMVC 与 iReport 集成的示例代码、预定义的...

      struts+ireport报表在页面显示,导出,打印功能

      Struts和iReport是两种广泛应用于Java Web开发的技术。Struts是一种基于MVC(Model-View-...总的来说,Struts和iReport的结合使得开发者能够方便地在Web应用中实现强大的报表功能,提供丰富的数据展示和导出选项。

      ireport报表参数传到子表步骤

      通过以上步骤,我们可以实现iReport中的主报表向子报表传递参数,从而实现动态的、基于参数的报表数据展现。在实际操作中,可能还会遇到如默认值设定、参数验证等更复杂的情况,但基本的传递流程和上述要点是不变的...

      struts2 jasper iReport 报表

      在实际应用中,结合Struts2、Javabean和iReport,你可以实现用户在Web界面上请求报表,后台服务通过Struts2框架处理请求,调用JDBC或ORM框架(如Hibernate)从数据库获取数据,将数据封装成Javabean集合,然后使用...

      ireport制作子报表,springmvc

      如果使用独立的数据源,需要在子报表中设置新的连接或查询。 四、`SpringMVC`中的报表生成 在`SpringMVC`中,我们需要一个控制器方法来处理报表生成的逻辑: ```java @GetMapping("/generateReport") public void ...

      ireport+struts2实现web开发

      - 在Struts2的Action类中,编写方法来加载报表模板,执行SQL查询,填充数据,然后生成报表。 - 使用Struts2的Result类型,如stream或freemarker,将报表以流形式发送到客户端浏览器。 4. 示例代码: 一个简单的...

    Global site tag (gtag.js) - Google Analytics