`

Struts2 + JasperReport应用一:导PDF,Excel,HTML显示

阅读更多

我用的是struts2.1.6,从struts2的自带的demo当中可以看到它的web.xml配置与之前的有点不同,有另外一种配置:

<filter>
		<filter-name>Struts2</filter-name>
		<filter-class>
			org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
		</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>Struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

 

这样的配置可以在web.xml配置我们的serlvet,如果写成以前的写法你配置上serlvet会报错。

 

将我们设置的报表文件和编译文件放到WebRoot下面的jasper下面,添加struts2对jasperReport的插件。

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

public class Person {
	private String person_Id;

	private String person_name;

	private String person_age;

	private String person_address;
}

 构造我们的service:

public class PersonService {
	public List<Person> getAllPerson() {
		List<Person> perList = new ArrayList<Person>();
		perList.add(new Person("101", "小博", "22", "湖北"));
		perList.add(new Person("102", "张三", "21", "湖南"));
		perList.add(new Person("103", "李四", "23", "江苏"));
		perList.add(new Person("104", "王五", "22", "上海"));
		return perList;
	}
}

 构造action:

public class PersonAction extends ActionSupport {

	private List<Person> presonList = null;

	private Map<String, String> reportParameter = null;

	@Override
	public String execute() throws Exception {
		presonList = new PersonService().getAllPerson();
		reportParameter = new HashMap<String, String>();
		reportParameter.put("year", "2009");
		reportParameter.put("unit_mc", "武汉XX科技有限公司");
		return SUCCESS;
	}
	
	public String htmlView(){
		return SUCCESS;
	}
	
	public List<Person> getPresonList() {
		return presonList;
	}

	public void setPresonList(List<Person> presonList) {
		this.presonList = presonList;
	}

	public Map<String, String> getReportParameter() {
		return reportParameter;
	}

	public void setReportParameter(Map<String, String> reportParameter) {
		this.reportParameter = reportParameter;
	}
}

 struts配置如下:

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<constant name="struts.action.extension" value="action" />

	<package name="jasperReport"
		extends="struts-default,jasperreports-default">
		<action name="PDF" class="com.mengya.action.PersonAction">
			<result name="success" type="jasper">
				<param name="location">/jasper/preson.jasper</param>
				<param name="dataSource">presonList</param>
				<param name="reportParameters">reportParameter</param>
				<param name="format">PDF</param>
			</result>
		</action>

		<action name="XLS" class="com.mengya.action.PersonAction">
			<result name="success" type="jasper">
				<param name="location">/jasper/preson.jasper</param>
				<param name="dataSource">presonList</param>
				<param name="reportParameters">reportParameter</param>
				<param name="format">XLS</param>
			</result>
		</action>
		<action name="XML" class="com.mengya.action.PersonAction">
			<result name="success" type="jasper">
				<param name="location">/jasper/preson.jasper</param>
				<param name="dataSource">presonList</param>
				<param name="reportParameters">reportParameter</param>
				<param name="format">XML</param>
			</result>
		</action>
		<action name="CSV" class="com.mengya.action.PersonAction">
			<result name="success" type="jasper">
				<param name="location">/jasper/preson.jasper</param>
				<param name="dataSource">presonList</param>
				<param name="reportParameters">reportParameter</param>
				<param name="format">CSV</param>
			</result>
		</action>
		<!-- 
			location:是指我们刚才用iReport编译生成的jasper文件
			dataSource:是指我们执行的数据库查询结果,在testAction类里把这个结果查询出来,这个参数必须要有
			format:是指需要输出的类型,默认是PDF,其他的输出类型有:XML、HTML、XLS、CSV、RTF ,注意这里一定要大写
			reportParameters:jasperreport中的Parameters
			除了这几个参数,还有下列参数:
			delimiter:是指如果输出类型为CSV的话,指定分割符,默认为“,”
			parse:是指是否解析location参数中的EL表达式,默认为 true
			contentDisposition:指定disposition,默认为“inline”,如果设为“attachment”就是强制下载
			documentName:输出的文件名
			imageServletUrl:生成图形的路径
		-->
	</package>
</struts>

 页面调用:

  <a href="PDF.action">PDF</a>
	        <a href="XLS.action">XLS</a>
	        <a href="XML.action">XML</a>
	        <a href="CSV.action">CSV</a>

 如果要想以HTML形式显示报表内容则还需要在web.xml配置jasperReport自带的一个servlet如下:

<!-- JasperReport包中自带的Servlet,用来做为HTML形式显示报表的时候报表的图片,要在这里配置上,图片在jasperReport包中 -->
	<servlet>
		<servlet-name>JasperReportImageServlet</servlet-name>
		<servlet-class>
			net.sf.jasperreports.j2ee.servlets.ImageServlet
		</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>JasperReportImageServlet</servlet-name>
		<url-pattern>/image</url-pattern>
	</servlet-mapping>

 

action中不需要修改,只需在struts.xml里添加一个HTML不配置如下:

<action name="HTML" class="com.mengya.action.PersonAction">
			<result name="success" type="jasper">
				<param name="location">/jasper/preson.jasper</param>
				<param name="dataSource">presonList</param>
				<param name="reportParameters">reportParameter</param>
				<param name="format">HTML</param>
				<param name="imageServletUrl">
					<![CDATA[/image?image=]]>
				</param>
			</result>
		</action>

 imageServletUrl的值就是上面的serlvet的路径,该servlet就是生成了一个图形,如果不配置该serlvet则页面上有图片没显示的样子。

页面调用如:

<a href="HTML.action">HTML</a>

 

 

7
1
分享到:
评论
7 楼 2014时间2014 2014-03-10  
打印功能怎么不能实现呢
6 楼 leesenone 2011-09-27  
能不能把你怎么制作preson.jrxml 和preson.jasper 截给图显示出来,用最新的iReport  谢谢了。我现在就是生成文件这块总是出问题,编译能显示表格什么的,空数据的情况下。但是放在项目中就不能用了。
5 楼 leesenone 2011-09-27  
我用iReport-4.1.1 编译你的 preson.jrxml 文件 或者是Preview 没有报错,能显示出来。但是把生成的preson.jasper放到项目中,就会报错
type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

net.sf.jasperreports.engine.JRRuntimeException: Unknown hyperlink target 0
net.sf.jasperreports.engine.JRHyperlinkHelper.getLinkTarget(JRHyperlinkHelper.java:273)
net.sf.jasperreports.engine.base.JRBaseTextField.normalizeLinkTarget(JRBaseTextField.java:317)
net.sf.jasperreports.engine.base.JRBaseTextField.readObject(JRBaseTextField.java:381)
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:1848)
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
java.util.ArrayList.readObject(ArrayList.java:593)
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)


如果用你的preson.jasper 文件能够正常运行。何解???
4 楼 csxthui123 2011-09-21  
乱码问题 怎么解决啊!?
3 楼 colver 2011-08-05  
在ireport中我的引用变量reportParameter中的值都是null  这个是怎么样配置的  希望高手能指点下
2 楼 colver 2011-08-05  
ireport 中建立报表是怎么样操作的?  呵呵   模仿你的做尼,  谢谢
1 楼 iejlzh 2010-08-18  
谢谢你,,,正需要

相关推荐

    整合Struts2.1+jasperreport

    3. 配置Struts2:在struts.xml文件中,定义一个Action,该Action将负责处理报表的请求。Action可能需要一个方法来填充数据源,并调用JasperPrint对象来生成报表。 4. 数据源处理:根据应用需求,可以使用JDBC、Java...

    Struts2+JasperReport报表应用

    在填充数据之后,JasperReport会生成最终的报表文件,这可能是一个PDF、HTML、Excel或其他格式的文件,然后可以通过Struts2的返回值机制重定向到一个展示报表的页面。为了在Web应用程序中呈现报表,通常需要将生成的...

    struts2+Ireport+Jasperreport实现报表导出

    Struts2、iReport与JasperReport是Java开发中用于构建高效、动态Web应用程序和报表生成的工具。在这个项目中,这些技术结合在一起,提供了一种强大的报表导出解决方案。以下是对这些关键技术及其在项目中的应用的...

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

    JasperReport 是一个强大的开源报表引擎,它允许开发者通过设计模板来生成各种类型的报表,如 PDF、HTML、Excel 等。而 Struts2 是一个流行的 Java web 开发框架,它简化了 MVC(模型-视图-控制器)架构的实现,使得...

    struts2整合jasperreport

    Struts2是一个流行的Java Web应用程序框架,它提供了MVC(模型-视图-控制器)架构,而JasperReport则是一个强大的报表生成库,可以生成多种格式的报表,如PDF、HTML、Excel等。iReport是JasperReport的可视化设计...

    jasperReport+struts2+jatoolsPrinter打印

    标题“jasperReport+struts2+jatoolsPrinter打印”涉及的是一个集成开发场景,主要集中在Java企业级应用中的报表生成和打印功能。jasperReport是一个强大的开源报表工具,能够帮助开发者创建复杂的报告设计;Struts2...

    Struts2与Jasperreport报表结合

    Struts2作为MVC(模型-视图-控制器)架构的一部分,主要用于处理HTTP请求并管理应用程序流程,而JasperReport则是一个强大的报告生成工具,能够创建复杂的报表设计,并以各种格式如PDF、HTML、Excel等导出。...

    struts2利用jasperreport导出excel

    Struts2是一个强大的MVC(模型-视图-控制器)框架,它被广泛应用于Java Web开发中,提供了灵活的控制层来处理用户请求并管理业务逻辑。而JasperReport则是一个开源的报告生成库,能够生成PDF、Excel、HTML等多种格式...

    Struts2_JasperReport整合的例子

    Struts2是一个强大的MVC框架,用于构建动态、数据驱动的Web应用程序,而JasperReport则是一个开源的报表工具,可以生成丰富的报表,支持多种输出格式如PDF、HTML、Excel等。下面我们将深入探讨这两者如何整合以及...

    Struts2整合JasperReport所需要的jar包

    Struts2是一个强大的MVC(模型-视图-控制器)框架,它为Java Web应用程序提供了结构和可扩展性。而JasperReport则是一款开源的报表工具,能够帮助开发者生成复杂、美观的报告。将这两者整合,可以让Struts2应用程序...

    SSH+JASPERREPORT整合例

    SSH+JASPERREPORT整合是将Struts2、Spring和Hibernate这三个开源框架与JasperReports报表工具集成,用于实现复杂的业务数据展示。SSH是企业级Java应用开发的常用框架组合,而JasperReports则是一个强大的报表生成库...

    Struts2与jasperReport简单示例

    JasperReport则是一个开源的报表生成工具,可以用于创建复杂的报表并导出多种格式,如PDF、HTML、Excel等。将Struts2与JasperReport结合,可以实现Web应用中的动态报表生成和展示。 首先,我们需要理解Struts2的...

    Struts2集成jasperreport3.7.1所需的Jar包

    Struts2是一个流行的Java Web应用程序框架,用于构建和管理MVC(模型-视图-控制器)架构的应用。它提供了一种灵活且强大的方式来组织和控制应用的业务逻辑。而JasperReport则是一款强大的报告生成工具,允许开发者...

    maven struts2 jasperreport ireport亲测通过整合多家资源

    接着,`JasperReport` 是一个开源的报表生成库,可以生成PDF、HTML、Excel、CSV等多种格式的报表。它支持复杂的报表设计,包括表格、图表、图像、文本等元素,还可以进行数据过滤、分组、排序等操作。JasperReport的...

    SSH项目整合案例+jasperreport

    在这个SSH项目整合案例中,开发者利用jasperreport库来生成报表,这是一个强大的报告工具,能够帮助开发者从数据库中抽取数据并以各种格式呈现,如PDF、HTML、Excel等。 Struts2作为MVC(模型-视图-控制器)框架,...

    struts2 + jasper report

    Struts2和JasperReport是Java开发中两个重要的框架,它们在企业级应用中有着广泛的应用。Struts2是一个强大的MVC(Model-View-Controller)框架,它为Web应用程序提供了一种组织业务逻辑和控制层的方式。而...

Global site tag (gtag.js) - Google Analytics