#改造struts2-jasperreport-plugin-2.1.6支持多数据源
目前官方发布的struts2-jasperreport-plugin-2.1.6插件仅支持java的数据源类型:Map,Iterable,isArray为true即各种Array、List,Enumeration,Iterator,将其无法识别的类型封装成Object[],最终转化为可迭代的List类型,具体可参加ValueStackDataSource的构造方法及MakeIterator的isIterable和convert方法,下图展示了jasperreport所支持的数据类型及ValueStackDataSource所处的位置:
由于图片无法上传,请参考同步blog:http://hi.baidu.com/fenglinquan/blog/item/bf851f2e651063594fc226e3.html
由此可见,为了使struts2-jasperreport-plugin-2.1.6插件支持多种数据源的唯一方法就是修改插件,修改思路如下:
在JasperReportsResult 的doExecute 方法中是通过ValueStackDataSource stackDataSource = new ValueStackDataSource(stack, dataSource); 获取jasperreport所需要的数据源的,为了使其支持多数据源需在此之前做判断过滤,做法为:先从stack获取数据源,判断其是否为JRDataSource,若是转换成JRDataSource,否则,再采用ValueStackDataSource方式赋值给JRDataSource接口,修改代码如下:
....省略部分....
// Construct the data source for the report.
//<begin added by twolf,20090907<使其支持多数据源>
ValueStack stack = invocation.getStack();
//先从stack获取数据源,判断其是否为JRDataSource,若是转换成JRDataSource,否则,再采用ValueStackDataSource方式赋值给JRDataSource接口
//ValueStackDataSource stackDataSource = new ValueStackDataSource(stack, dataSource);
JRDataSource jrDataSource = null;
Object obj = stack.findValue(dataSource);
if(obj instanceof JRDataSource) {
jrDataSource = (JRDataSource) obj;
} else if(obj instanceof ResultSet) { //自动封装ResultSet为Jasperreport数据源JRResultSetDataSource
jrDataSource = new JRResultSetDataSource((ResultSet)obj);
} else {
jrDataSource = new ValueStackDataSource(stack, dataSource);
}
//end added by twolf,200907>
....省略部分....
try {
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(systemId);
//<begin modified by twolf,20090907(修改为JRDataSource对象)
//jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, stackDataSource);
jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, jrDataSource);
//end modified by twolf,20090907>
} catch (JRException e) {
LOG.error("Error building report for uri " + systemId, e);
throw new ServletException(e.getMessage(), e);
}
....省略部分....
至此,jasperreport-plugin已具备支持各种数据源(ResultSet、ValueStackDataSource及任何JRDataSource)的能力。
源码下载地址:http://redsnow-fenglin.iteye.com/blog/508715
同步blog:http://hi.baidu.com/fenglinquan/blog/item/bf851f2e651063594fc226e3.html
分享到:
相关推荐
官方的struts2-jasperreport-plugin-2.1.6.jar,分享于有需要的朋友~~
在原有官方struts2-jasperreport-plugin-2.1.6.jar的基础上解决了三个问题:一是普通报表HTML及Excel格式预览无法显示px图片;一是图形报表无法HTML格式预览;一是图形报表一次请求返回多张时存在报表覆盖异常现象;
在官方struts2-jasperreport-plugin-2.1.6基础上,解决问题有二:一是普通报表HTML及Excel格式预览无法显示px图片,二是图形报表HTML格式无法展示;分享于有需要的朋友~~
官方发布的 struts2-jasperreport-plugin-2.1.6存在以下问题: 1、普通报表HTML、Excel格式浏览存在px图片无法显示; 2、解决问题:图形报表一次请求返回多张时存在报表覆盖异常现象; 3、支持数据源单一(改造后支持...
若${rptAlone}取值为Y,则为该配置的报表生成一个单独的目录存放,服务于一次请求返回多张【图形】报表,避免多张【图形】报表重叠现象;若${rptAlone}取值为N,则为该配置的报表放在一个公共的目录下,此时存在上面...
jasperReport生成饼图等图片时,如果有图片,则html页面显示不了,本包修改了源码,解决了html格式输出图片的正常显示。
struts2-jasperreports-plugin-2.0.6.jar
整合Struts2+JasperReport3 详细讲解利用iReport开发报表
修改后的struts2-jasperreports-plugin-2.1.8.1.jar 避免struts2 JasperReport 导出CSV、HTML乱码
Struts2集成jasperreport3.7.1所需的所有的Jar文件,已经经过测试,请放心使用。
本例子是运用Struts2和JasperReport整合完成的。修改下数据库,就可以直接运行,导出各种格式的报表了。对初学者很有用。
使用Spring2.5+Struts2+ibatis+jasperreport3.1.4 实现Struts2与Jasperreport报表结合
JasperReports作为一种优秀且开源的报表引擎,不利用太...本示例比较简单,采用的数据源即为JavaBean,而没有采用复杂的数据库,其实原理是一样的。只是传递给JasperReports的参数随着连接方式的变化而略加修改而已。
iReport-JasperReport 报表开发指南,PDF格式,里面带有图文,入门性质的教程
asm-2.2.jar commons-collections-2.1.1.jar commons-digester-1.7.jar commons-fileupload-1.2.1.jar commons-logging-1.0.4....struts2-jasperreports-plugin-2.1.8.1.jar xwork-core-2.1.6.jar iTextAsianCmaps.jar
整合Struts2+JasperReport Web报表应用示例 整合Struts2+JasperReport Web报表应用示例
JasperReport Struts2 web 整合所需完整jar ant-1.7.1.jar antlr-2.7.5.jar asm.jar bsh-2.0b4.jar cglib-2.1.jar commons-beanutils-1.7.0.jar commons-beanutils-1.7.jar commons-collections-2.1.jar commons-...
struts2 jasperreport