`

使用JavaBean构造JasperReport子报表

阅读更多

使用JavaBean作为数据源构造JasperReport子报表样式如下:

 

构造我的JavaBean如下(get,set方法省略):

public class Person {

	private String name;

	private String age;

	private String sex;

	private String telephone;
}

 

public class Depart {
	private String subTitle;

	private String depart_name;

	private List<Person> personList = null;
}

 构造我们的Service:

 

public class DepartService {
	public List<Depart> getAllDepart() {
		List<Depart> departList = new ArrayList<Depart>();

		List<Person> personList = null;

		Depart depart = new Depart("测试一", "开发部");
		personList = new ArrayList<Person>();
		personList.add(new Person("小博", "22", "男", "123456"));
		personList.add(new Person("张三", "21", "男", "321456"));
		personList.add(new Person("李四", "24", "女", "654321"));
		personList.add(new Person("王五", "23", "男", "123456"));
		depart.setPersonList(personList);
		departList.add(depart);

		depart = new Depart("测试二", "研发部");
		personList = new ArrayList<Person>();
		personList.add(new Person("小博", "22", "男", "123456"));
		personList.add(new Person("李四", "24", "女", "654321"));
		depart.setPersonList(personList);
		departList.add(depart);

		departList.add(depart);
		return departList;
	}
}

 构造我们的Servlet:

public class JRPDFServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		DepartService departMght = new DepartService();
		List<Depart> departList = departMght.getAllDepart();

		ServletContext servletContext = this.getServletConfig().getServletContext();
		File departJasperFile = new File(servletContext.getRealPath("/jasper/Main_Department_List.jasper"));
		// 设置子报表的路径
		String root_path = servletContext.getRealPath("/");
		root_path = root_path.replace("\\", "\\\\");
		root_path = root_path + "jasper\\\\";

		Map<String, String> parameters = new HashMap<String, String>();
		JasperPrint jasperPrint = null;
		try {
			JasperReport departJasperReport = (JasperReport) JRLoader
					.loadObject(departJasperFile.getPath());
			parameters.put("SUBREPORT_DIR", root_path);
			jasperPrint = JasperFillManager.fillReport(departJasperReport,
					parameters, new JRBeanCollectionDataSource(departList));

		} catch (JRException e) {
			e.printStackTrace();
		}
		if (null != jasperPrint) {
			FileBufferedOutputStream fbos = new FileBufferedOutputStream();
			JRPdfExporter exporter = new JRPdfExporter();
			exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, fbos);
			exporter
					.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
			try {
				exporter.exportReport();
				fbos.close();
				if (fbos.size() > 0) {
					response.setContentType("application/pdf");
					response.setContentLength(fbos.size());
					ServletOutputStream ouputStream = response
							.getOutputStream();
					try {
						fbos.writeData(ouputStream);
						fbos.dispose();
						ouputStream.flush();
					} finally {
						if (null != ouputStream) {
							ouputStream.close();
						}
					}
				}
			} catch (JRException e1) {
				e1.printStackTrace();
			} finally {
				if (null != fbos) {
					fbos.close();
					fbos.dispose();
				}
			}
		}
	}
}

 

在web.xml配置servlet如下:

<servlet>
		<servlet-name>JRPDFServlet</servlet-name>
		<servlet-class>com.mengya.servlet.JRPDFServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>JRPDFServlet</servlet-name>
		<url-pattern>/JRSubPDFServlet</url-pattern>
	</servlet-mapping>

 页面调用:

<h3 align="center"><a href="JRSubPDFServlet">子表报</a></h3>

 

主要是报表设计如下面附件图片。

  • lib1.rar (5.8 MB)
  • 描述: 所需要jar包1
  • 下载次数: 514
  • lib2.rar (6.5 MB)
  • 描述: 所需要jar包2
  • 下载次数: 894
  • 大小: 27.5 KB
  • 大小: 10.3 KB
  • 大小: 20.3 KB
  • 大小: 22.2 KB
  • 大小: 41.2 KB
  • 大小: 49.8 KB
  • 大小: 43.7 KB
12
1
分享到:
评论
7 楼 yang_123 2015-01-04  
谢谢,正在学jasper
6 楼 雨过有痕 2012-11-08  
楼主,在加载报表模板的时候报错啊?
java.lang.NoClassDefFoundError: Lorg/apache/commons/logging/Log;
java.lang.Class.getDeclaredFields0(Native Method)
java.lang.Class.privateGetDeclaredFields(Class.java:2291)
java.lang.Class.getDeclaredField(Class.java:1880)
java.io.ObjectStreamClass.getDeclaredSUID(ObjectStreamClass.java:1610)
java.io.ObjectStreamClass.access$700(ObjectStreamClass.java:52)
java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:425)
java.security.AccessController.doPrivileged(Native Method)
java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:413)
java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:310)
java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:547)
java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1583)
java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
java.io.ObjectInputStream.readArray(ObjectInputStream.java:1667)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323)
java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:480)
net.sf.jasperreports.engine.base.JRBaseReport.readObject(JRBaseReport.java:736)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849)
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:94)
net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:70)
com.mengya.servlet.JRPDFServlet.doPost(JRPDFServlet.java:52)
com.mengya.servlet.JRPDFServlet.doGet(JRPDFServlet.java:33)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)



5 楼 hunter3900 2012-08-26  
感激不尽,正在学jasper
4 楼 wqxiea 2012-03-13  
太谢谢,非常感谢!
3 楼 jiayang 2010-11-05  
再傻傻的问一句
dataset 可以用javabean作数据源吗?
ireport的面板上好像可以设置,执行时总是在报
警告The supplied java.sql.Connection object is null.
javabean的内容也不出来.
2 楼 jiayang 2010-11-05  
学习了。
我用JavaBean作为数据源构造table控件时,
模板编译时总是报Field not found
不用table控件时,就不会报错。
不知道差在哪里?
可以给点建议吗?
1 楼 xuguozhuu 2010-08-20  
太棒了,今天我也遇到这个问题了,幸好有你的博文!十分感谢!

相关推荐

    jasperreport+ireport创建javaBean多数据源报表

    将JavaBean用作数据源时,jasperreport会遍历JavaBean的属性并将其显示在报表上。这使得开发者能够灵活地利用业务对象的数据生成报表。 **多数据源支持** jasperreport允许使用多个数据源,这对于处理复杂报表场景...

    JasperReport报表设计总结

    JasperReport是一款强大的Java报表工具,它允许开发者创建复杂、多格式的报表,并能与各种数据源集成。本文主要总结了JasperReport报表设计的关键点,包括报表格式定制、数据填充以及显示或打印。 首先,报表格式的...

    jasperReport自定义javabean数据源实例

    总结来说,使用JasperReport的自定义JavaBean数据源,可以方便地将业务对象与报表紧密结合,提高报表的灵活性和可维护性。通过创建JavaBean,设计报表,编写数据源代码,最后运行报表,你可以轻松地实现自定义的数据...

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

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

    ireport+javabean实现可视化报表

    - **运行报表**:在Java应用程序中,开发者使用jasperreport的API加载编译后的报表模板,创建jasprint对象,然后传入填充数据的javabean实例,最后根据需要输出报表到指定格式。 通过这样的流程,开发者可以灵活地...

    整合Struts2+JasperReport Web报表应用示例

    这通常涉及到创建JRDataSource对象,该对象可以是JavaBean集合或者其他类型的数据源,用来提供报表所需的动态数据。然后,使用JasperFillManager.fillReport()方法填充报表,并根据需要设置输出格式,如HTML或PDF。 ...

    Struts2+JasperReport报表应用

    Struts2和JasperReport的整合是Web应用程序中创建动态报表的一种常见方法。JasperReport是一个功能强大的开源报表引擎,允许开发人员通过iReports这样的设计工具以可视化的形式创建复杂的报表模板。Struts2,作为一...

    iReport-JasperReport 报表开发指南

    下面是一个简单的子报表使用示例: 1. **创建子报表**: 在 iReport 中新建一个报表作为子报表。 2. **定义参数**: 在子报表中定义接受参数。 3. **在主报表中嵌入**: 将子报表作为元素添加到主报表的适当位置。 4. ...

    struts2+jasperReport+ireport做报表总结

    总之,使用Struts2、JasperReport和iReport开发报表时,要关注数据源配置、中文支持、Struts2与报表之间的交互以及子报表的参数传递。遇到问题时,多参考官方文档、社区资源,结合错误信息进行排查,往往能找到合适...

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

    在这个过程中,我们将深入探讨如何在`iReport`中使用`JavaBean`作为数据源来开发基于`JasperReports`的报表。 首先,我们需要了解`JavaBean`。`JavaBean`是一种符合特定规范的Java类,通常用于封装数据并提供公共...

    ireportjasperreport开源报表中使用javabean作为数据源的详细实.docx

    ### 使用JavaBean作为数据源在iReport+JasperReport中的详细实践 #### 一、简介 iReport 和 JasperReport 是一款强大的开源报表工具,广泛应用于Web应用开发中,支持多种数据源(如数据库、JavaBean等)以及多种...

    jasperreport学习 之 javabean封装成list作为数据源.pdf

    在JasperReport中,使用JavaBean作为数据源不仅可以将数据以对象的形式进行封装,还能以集合的形式(例如List)来提供给报表工具。这为数据的管理提供了极大的便利。那么,如何将JavaBean封装成List并用作...

    JasperReport中使用多个数据源的方法

    传统上,实现这种功能的一种常见方法是使用子报表技术,但这种方法往往会增加开发复杂度和降低性能。 #### 核心知识点解析 本文将详细介绍如何在JasperReports中直接在一个报表中使用多个数据源,从而避免了子报表...

    JasperReport+iReport高级报表设计实战

    使用JavaBean集合作为数据源提供了更大的灵活性。JavaBean可以封装业务逻辑和数据,报表在运行时动态绑定到JavaBean,这样改动数据源或查询无需重新编译报表。 3. **实战报表设计** - **简单的复杂表头报表设计**...

Global site tag (gtag.js) - Google Analytics