`
黑暗浪子
  • 浏览: 507833 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Struts2讲义29

阅读更多

6.3  JasperReports 报表视图技术使用介绍

在实际的 Web 项目开发中,往往需要在视图界面中生成各种文件格式的报表文件以供有数据分析需求的客户查看。有一定工作经验的读者往往也知道同类型的报表生成软件工具又很多,其中最著名的是 JasperReports 工具。 Struts2 中也对该报表工具提供了很好的支持。因此有包含大量数据需要操作或查看的 Web 项目开发中,就可以将两者结合起来。形成可以查看数据的报表视图文件。本小节将具体介绍如何使用 Struts2 JasperReports 报表工具生成特定的报表视图文件。

技术要点

本节代码还是和前几小节使用相同示例来说明 JasperReports Struts2 中使用方式。

JasperReports Web 项目中基本使用方式。

struts.xml 中设置使用 JasperReports Action 配置定义

使用 JasperReports Action 如何利用 JasperReports 模板 jrxml 文件来 生成 jasper 文件

演示代码

显示数据的 JasperReports 模板 jrxml 文件代码 ( 笔者仅将重点部分代码罗列给读者阅读 )

 

<!-------文件名:jasper_template.jrxml----->
………
         <reportFont name="宋体" isDefault="true" fontName="宋体" size="12" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>
         <field name="material" class="java.lang.String"/>
         <field name="bid" class="java.lang.Double"/>
         <field name="mount" class="java.lang.Integer"/>
         ………
         <columnHeader>
                   <band height="20">
                            <staticText>
                                     <reportElement x="0" y="0" width="150" height="20"/>
                                     <textElement textAlignment="Center" >
                                               <font isUnderline="false"/>
                                     </textElement>
                                     <text><![CDATA[材料名                 ]]></text>
                            </staticText>
                            <staticText>
                                     <reportElement x="150" y="0" width="150" height="20"/>
                                     <textElement textAlignment="Center">
                                               <font isUnderline="false"/>
                                     </textElement>
                                     <text><![CDATA[材料价格(单位:元)                 ]]></text>
                            </staticText>
                            <staticText>
                                     <reportElement x="300" y="0" width="150" height="20"/>
                                     <textElement textAlignment="Center">
                                              <font isUnderline="false"/>
                                     </textElement>
                                     <text><![CDATA[材料库存量(单位:个)                 ]]></text>
                            </staticText>
                   </band>
         </columnHeader>
         <detail>
                   <band height="15">
                            <textField isBlankWhenNull="true" hyperlinkType="None">
                                     <reportElement x="0" y="0" width="150" height="15"/>
                                     <textElement textAlignment="Center"/>
                                     <textFieldExpression class="java.lang.String"><![CDATA[$F{material}]]></textFieldExpression>
                            </textField>
                            <textField isBlankWhenNull="true" hyperlinkType="None">
                                     <reportElement x="150" y="0" width="150" height="15"/>
                                     <textElement textAlignment="Center"/>
                                     <textFieldExpression class="java.lang.Double"><![CDATA[$F{bid}]]></textFieldExpression>
                            </textField>
                            <textField isBlankWhenNull="true" hyperlinkType="None">
                                     <reportElement x="300" y="0" width="150" height="15"/>
                                     <textElement textAlignment="Center"/>
                                     <textFieldExpression class="java.lang.Integer"><![CDATA[$F{mount}]]></textFieldExpression>
                           </textField>
                   </band>
         </detail>
         ………
 

配置文件对 Action 的配置内容:

 

<!-----------------------文件名:struts.xml----------->
………
<!-- 设置使用JasperReports的Action -->
         <package name="C06.3"
                   extends="struts-default,jasperreports-default">
                   <action name="PDF" class="action.JasperAction">
                            <!-- result类型设置为jasper -->
                            <result name="success" type="jasper">
                                     <!-- 编译后的jasper文件路径 -->
                                     <param name="location">
                                               /jasperreports/compiled_jasper_template.jasper
                                     </param>
                                     <!-- 视图界面中显示的数据的数据源 -->
                                     <param name="dataSource">mList</param>
                                     <!-- 报表生成格式 -->
                                     <param name="format">PDF</param>
                            </result>
                   </action>
         </package>
………
 

JasperReports 模板文件编译成 jasper 文件的 Action 代码:

 

<!------------文件名:JasperAction.java----->
public class JasperAction extends ActionSupport {
         private List mList;
………
         public String execute() throws Exception {
                   ………
                   //读取jasper_template.jrxml文件,将其编译成.jasper文件,以供Action调用将数据显示在视图界面中
                   try {
                            String reportSource;
                            reportSource = ServletActionContext.getServletContext().getRealPath("/jasperreports/jasper_template.jrxml");
                            File parent = new File(reportSource).getParentFile();
                            JasperCompileManager.compileReportToFile(reportSource, new File(parent, "compiled_jasper_template.jasper")
                                               .getAbsolutePath());
                   } catch (Exception e) {
                            e.printStackTrace();
                            return ERROR;
                   }
                   ………
}
 

生成 PDF 格式报表文件的视图界面如图 6.3

 

6.3  使用 jasper 生成的 PDF 报表文件效果图

代码解释

1 )使用 JasperReports 工具时候,在 Web 项目的 /WEB-INF/lib 文件夹下必须导入 jasperreports-3.0.1.jar 工具包,这样在 JAVA 代码中才能使用相关 JasperReports 的操作类。如果需要让 JasperReports 支持中文字符编码集,则还需要导入 jasperreports-3.0.1.jar itext-1.4.jar 两个支持中文字符编码的 jar 包。除此之外要在 Struts2 中和 JasperReports 结合使用还要导入 struts2-jasperreports-plugin-2.0.11.2.jar 这个包。

2 JasperReports 要对报表的格式或者数据内容进行定义。一般都是使用后缀名为 jrxml 的模板文件。其实该模板文件就是一个 xml 文件,其中使用的标签都是由 JasperReports dtd 文件来定义(关于 dtd 文件概念请见第二章)。

由示例代码可以知道,该 xml 文件支持定义 JAVA 变量。而“ <![CDATA[]]> ”中的字符内容都是可以在视图界面上显示的静态文字。除此之外还可以用“ $F ”来定义各个需要显示的动态数据字段。用“ $V ”来显示变量值。当然还有其他显示格式,读者可参考相关 JasperReports 文档来使用。

如果要让视图文件显示中文字符,在该 jrxml 模板文件头部分需要声明如下:

<reportFont name="宋体" isDefault="true" fontName="宋体" size="12" pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H" isPdfEmbedded="true"/>
 

这样就可以在生成的报表文件中显示中文字符或数据。

在一般情况下,编辑和修改 jrxml 模板文件可以使用 1 个著名的可视化工具 iReport 。这样就没必要手工的在 jrxml 文件中进行修改,尤其是要显示大量数据的报表中。手工修改 jrxml 文件是件很累人又效率很低的工作。有关 iReport 工具的具体介绍读者也可自行参阅相关资料。因为不是本书重点,这里只是稍微涉及到。

3 )在 Struts2 配置文件中,笔者定义使用 JasperReports Action 配置。请参看代码,首先 package 扩展的文件除了“ struts-default ”之外还要有“ jasperreports-default ”,两者用“,”相隔。这是因为 struts2 使用 JasperReports 时候调用的 jar 包是之前所说的“ struts2-jasperreports-plugin-2.0.11.2.jar ”这个包。在该包中对于 JasperReports result 配置文件是包中的 struts-plugin.xml 文件。其中用到的 package 名字就是“ jasperreports-default ”。因此要用到 JasperReports Action ,它的 result 类型必定设为“ jasper ”。这样只有在 package 中声明了“ jasperreports-default ”,用到相关 jasper 类型的 result 时候才会生效,导航到相应的视图文件。否则不声明的话,则不会找到相应的视图文件。在界面上就会报错。

4 )在 jasper 类型的 result 中,还可以定义一些相关的参数。这些参数中 location 是显示经过编译后生成的后缀名为 jasper 的文件存放路径。也可以理解为 JasperReports 的视图文件显示的 URL 。而 dataSource 则是定义报表视图文件中显示的数据是取自哪个数据源的。示例里的 mList 就是在 Action 代码中的 mList 属性。在 Action execute 方法中和前几小节相同都把材料数据作为 mList 元素统一组合起来放入 mList 数据集合中。因此示例中报表视图文件显示的数据就是 mList 中包含的数据。由图 6.3 显示的数据也可以看出的确如此。 format 是定义报表生成的格式,因为 JasperReports 不仅可以生成 PDF 格式的还可以生成 XLS (显示微软 excel 文件)、 CSV XML HTML 等格式的报表文件。在 jasper 类型的 result 中默认缺省的格式是 PDF 格式。除了这些参数还有 parse contentDisposition 等属性,因为实际开发中用处不大,这里笔者也不介绍了。

5 )在使用 JasperReports Action 代码中,参阅代码可知主要是调用了 JasperReports jasperreports-3.0.1.jar 工具包中的 JasperCompileManager 类来将 jrxml 模板文件编译成 jasper 文件。这里的 jasper 文件其实可以理解为 Servlet JSP 文件。报表视图文件正是使用该文件才将 jrxml 文件中定义的数据显示格式、动态数据和静态文本都经过编译后显示在视图界面中。

在示例的 Action 代码中, JasperCompileManager 类使用 compileReportToFile 方法将 jrxml 文件编译成 jasper 文件。这里使用了相关的 JAVA 输入输出方法。将编译后生成的 jasper 文件和 jrxml 文件放置在同一目录下。

注意: compileReportToFile 方法中,两个参数一个是 jrxml 文件存放的实际目录路径,另外一个是将要生成的 jasper 文件存放的实际目录路径。这里不是两个文件的相对路径,而是它们的绝对路径。

 

  • 大小: 72.6 KB
分享到:
评论
3 楼 黑暗浪子 2010-08-27  
hanxin830311 写道
楼主,我用了很多方法来进行struts2+ireport的整合,做了几个demo,数据源为jdbc和javabean,可是所有的测试都以java.lang.NoSuchMethodError: org.codehaus.groovy.runtime.ScriptBytecodeAdapter.castToType(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
错误结束,要我很头疼,网上没找到资料,不知道这问题到底出来哪里?好几天了都没弄好。急死了,给点指点吧

看exception信息,好像是类型转化问题。你自己debug一下了。
2 楼 hanxin830311 2010-08-27  
楼主,我用了很多方法来进行struts2+ireport的整合,做了几个demo,数据源为jdbc和javabean,可是所有的测试都以java.lang.NoSuchMethodError: org.codehaus.groovy.runtime.ScriptBytecodeAdapter.castToType(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
错误结束,要我很头疼,网上没找到资料,不知道这问题到底出来哪里?好几天了都没弄好。急死了,给点指点吧
1 楼 SpringJava 2009-10-19  
hi,楼主我看到了那个首页的那个背景是模板设置的原因。不用理这个问题。

相关推荐

    struts2讲义 struts2讲义struts2讲义struts2讲义struts2讲义

    ### Struts2讲义知识点概览 #### 一、Struts2的历史与发展 - **Struts框架的发展历程**: - Struts最初版本发布于2000年,是Java Web开发领域的一个重要里程碑。 - 随着时间的发展和技术的进步,Struts逐渐暴露...

    struts2讲义

    ### Struts2框架入门知识点详解 #### 一、Struts2框架概述 ##### 1.1 Struts2简介 Struts2是一个基于MVC(Model-View-Controller)设计模式的Web应用框架,用于简化Java Web应用程序的开发过程。与传统的Java Web...

    struts2讲义 DOC版

    struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义struts2讲义

    struts2讲义-详解

    本讲义将详细介绍Struts2的核心概念、工作原理以及如何在实际项目中应用。 一、Struts2简介 Struts2是Apache软件基金会的开源项目,它是Struts1的升级版,旨在解决Struts1在可扩展性和灵活性上的不足。Struts2提供...

    struts2讲义,讲解struts2的框架

    在本讲义中,我们将深入探讨Struts2的基本概念、依赖的库、启动配置以及配置文件。 首先,开发Struts2应用需要依赖一些核心的JAR文件。这些文件包括: 1. `struts2-core-2.x.x.jar`:这是Struts2框架的核心库,...

    原创struts2讲义2.pdf

    ### Struts2框架详解 #### 一、Struts2框架介绍与概述 ##### 1.1 Struts2框架概述 Struts2是一个基于MVC(Model-View-Controller)模式的开源Java Web应用框架,它提供了强大的功能来帮助开发者构建灵活、可扩展...

    《Struts2讲义》吴峻申【电子书】

    第2章 Web基础技术简介第3章 Struts2核心技术第4章 另一Struts2核心技术:拦截器第5章 Struts2标签库第6章 Struts2非JSP视图技术第7章 Struts2类型转换技术第8章 Struts2输入校验第9章 Struts2国际化第10章 Struts2...

    Struts2讲义(Word文档格式)

    本讲义详细介绍了Struts2框架的各个方面,帮助开发者从基础到进阶全面掌握其用法。 1. **Struts2概述** Struts2是Apache软件基金会的开源项目,它继承了Struts1的优点并解决了其局限性,提供了更优秀的行动控制器...

    struts2讲义.doc

    ### Struts2讲义知识点概览 #### 一、Struts2的历史与发展 - **Struts框架的演变**:从Struts1到Struts2,框架经历了从MVC(Model-View-Controller)架构的经典实践到更为灵活、强大的迭代升级。 - **Struts2的...

    struts2 教程 讲义.(pdf)

    本教程讲义深入浅出地介绍了Struts2的核心概念和技术,旨在帮助开发者快速掌握这个框架的使用。 在Struts2中,主要知识点包括: 1. **MVC设计模式**:MVC模式是软件工程中的经典设计模式,它将应用程序分为模型...

    struts2讲义,解析

    这个“struts2讲义”显然提供了一个全面的教程,旨在帮助学习者理解和掌握Struts2的核心概念和技术。以下是Struts2的一些关键知识点: 1. **MVC模式**:Struts2基于Model-View-Controller(MVC)设计模式,它将应用...

    Struts2讲义1

    Struts2讲义1 Struts2是一款基于MVC(Model-View-Controller)设计模式的Java Web开发框架,由Apache软件基金会维护。它继承了Struts1的优点,并结合了WebWork框架的功能,提供了更强大的控制层解决方案。Struts2的...

    西安野马计算机培训学校STRUTS2讲义

    西安野马计算机培训学校的STRUTS2讲义,可能涵盖了这一框架的基础知识和高级特性,帮助学员理解和掌握Struts2的核心概念。 首先,Struts2的基础部分可能包括以下几个方面: 1. **架构原理**:讲解Struts2的MVC设计...

    黑暗浪子写的struts2讲义.pdf

    Struts2是Apache软件基金会...总的来说,黑暗浪子的这本Struts2讲义涵盖了Struts2的各个方面,无论对于初学者还是有经验的开发者,都是一个宝贵的参考资料,能帮助读者深入理解和熟练运用Struts2框架,提高开发效率。

    struts2讲义_吴峻申

    Struts2讲义 作者:吴峻申 目录 第1章 Struts过时了吗? 10 1.1 Struts历史发展过程 10 1.2 Struts2的“简历” 13 1.2.1 标签库介绍 13 1.2.2 拦截器应用目的 14 1.2.3 FilterDispatcher和Action概述 14 1.2.4 ...

Global site tag (gtag.js) - Google Analytics