`

改造struts2-jasperreport-plugin-2.1.6支持多数据源

阅读更多

#改造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 

2
1
分享到:
评论

相关推荐

    struts2-jasperreport-plugin-2.1.6

    官方的struts2-jasperreport-plugin-2.1.6.jar,分享于有需要的朋友~~

    struts2-jasperreport-plugin-2.1.6-adjust2.0

    在原有官方struts2-jasperreport-plugin-2.1.6.jar的基础上解决了三个问题:一是普通报表HTML及Excel格式预览无法显示px图片;一是图形报表无法HTML格式预览;一是图形报表一次请求返回多张时存在报表覆盖异常现象;

    struts2-jasperreport-plugin-2.1.6-adjust1.0

    在官方struts2-jasperreport-plugin-2.1.6基础上,解决问题有二:一是普通报表HTML及Excel格式预览无法显示px图片,二是图形报表HTML格式无法展示;分享于有需要的朋友~~

    struts2-jasperreport-plugin-2.1.6.1

    官方发布的 struts2-jasperreport-plugin-2.1.6存在以下问题: 1、普通报表HTML、Excel格式浏览存在px图片无法显示; 2、解决问题:图形报表一次请求返回多张时存在报表覆盖异常现象; 3、支持数据源单一(改造后支持...

    struts2-jasperreport-plugin-adjust2.1

    若${rptAlone}取值为Y,则为该配置的报表生成一个单独的目录存放,服务于一次请求返回多张【图形】报表,避免多张【图形】报表重叠现象;若${rptAlone}取值为N,则为该配置的报表放在一个公共的目录下,此时存在上面...

    struts2-jasperreports-plugin-2.1.6.jar 修改了html格式图片无法显示

    jasperReport生成饼图等图片时,如果有图片,则html页面显示不了,本包修改了源码,解决了html格式输出图片的正常显示。

    struts2-jasperreports-plugin-2.0.6.jar

    struts2-jasperreports-plugin-2.0.6.jar

    Struts2集成jasperreport3.7.1所需的Jar包

    在报表生成中,可能会用到POI来处理Excel数据源。 6. **freemarker-2.3.15.jar**:FreeMarker是一个模板引擎,用于生成文本输出,如HTML或邮件。在Struts2中,FreeMarker常用来生成动态视图,也可以用于生成报表...

    struts2整合jasperreport

    4. **生成报表**:在Action中,我们需要加载报表模板,设置数据源(通常是Action中的JavaBean集合),然后使用JasperReport API生成报表。这通常涉及以下步骤: ```java // 在ReportAction的execute方法中 Map ...

    Struts2_JasperReport整合的例子

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

    struts2-jasperreports-plugin-2.1.8.1.jar

    修改后的struts2-jasperreports-plugin-2.1.8.1.jar 避免struts2 JasperReport 导出CSV、HTML乱码

    Struts2+JasperReport报表应用

    通过实例化多个PeopleBean对象,并将它们添加到一个列表中,可以为报表提供数据源。 报表的填充过程是由JasperReport库处理的。它会经历三个主要步骤:编译(将jrxml转换为.jasper文件)、加载(加载.jasper文件)...

    Struts2整合JasperReport所需要的jar包

    - `struts2-json-plugin.jar`:支持JSON格式的响应,对于AJAX请求非常有用。 - `struts2-tiles-plugin.jar`(可选):如果使用Tiles模板引擎,需要此插件。 2. **JasperReport库**: - `jasperreports.jar`:...

    Struts2与jasperReport简单示例

    Struts2的jar包包括struts2-core、struts2-convention-plugin等,JasperReport的jar包主要有jasperreports、jasperreport-fonts等。 2. **创建报表**:使用JasperReport的报表设计工具iReport或直接编写JRXML文件来...

    Struts2与Jasperreport报表结合

    在本项目中,Spring将被用来管理Struts2的Action和业务服务,以及iBatis的数据源和SqlMap配置。 iBatis作为持久层框架,它允许开发者直接编写SQL语句,避免了ORM框架带来的性能损失。在JasperReport中,iBatis可以...

    整合Struts2.1+jasperreport

    Struts2.1和JasperReport的整合是Java Web开发中的一个重要话题,它涉及到Web应用程序的MVC(模型-视图-控制器)架构和数据报告的生成。Struts2.1是一个强大的MVC框架,而JasperReport则是一个用于创建复杂报表的...

    iReport-JasperReport 报表开发指南

    它支持导入各种数据源,如数据库、XML文件或Java集合,并且可以使用Java、SQL或者表达式语言(JEXL)编写计算逻辑。在iReport中,你可以创建报告布局,包括表格、文本框、图表等元素,并对它们进行样式设置。 本...

    struts2+jasperReport+ireport做报表总结

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

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

    Struts2和JasperReport是两个在Java Web开发中广泛使用的框架。Struts2作为MVC(模型-视图-控制器)架构的一部分,主要用于处理HTTP请求和管理应用程序流程,而JasperReport则是一个强大的报告生成工具,能够创建...

Global site tag (gtag.js) - Google Analytics