零基础学Struts
上QQ阅读APP看书,第一时间看更新

12.6 整合Struts 2和JasperReports开发报表

Struts 2提供了JasperReports插件支持,借助于该插件,Struts 2可以非常方便和容易地使用JasperReports来生成报表。

12.6.1 安装JasperReports插件

JasperReports插件位于struts-2.0.11.1下的lib目录下。只需将该插件复制到Web应用下的WEB-INF\lib目录下就可以了。但是发现该插件下的“struts-plugin.xml”配置同JFreeChart插件有类似问题,如下代码所示。

        <! DOCTYPE struts PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
          "http://struts.apache.org/dtds/struts-2.0.dtd">
        <struts>
            <package name="jasperreports-default">
            <result-types>
                      <result-type name="jasper" class="org.apache.struts2.views.
                        jasperreports.JasperReportsResult"/>
            </result-types>
            </package>
        </struts>

从“struts-plugin.xml”配置文件中可以看出,其定义了一个包jasperreports-default,但是该包没有去继承struts-default。所以这里手动修改使得该jasperreports-default包继承Struts 2原有的默认包struts-default,代码如下所示。

        <struts>
            <package name="jasperreports-default" extends="struts-default">
            <result-types>
                        <result-type name="jasper" class="org.apache.struts2.views.
                          jasperreports.JasperReportsResult"/>
            </result-types>
            </package>
        </struts>

修改完成后,重新将该插件解压出的文件夹打包成JAR,并将该其复制到Web应用下的WEB-INF\lib目录中。

12.6.2 创建生成报表的Action

插件安装完成后,开始添加Action用来生成报表,在该Action中可以添加一个get×××的方法,通过该方法返回一个集合。经过Action配置后,该集合中的数据将被填充到报表中。

首先添加一个User类,该类是一个普通的JavaBean。该类中包含3个属性,添加其构造函数以及各属性的setter和getter方法,代码如下所示。

        package net.hncu.bean;
        public class User {
              // username属性
              private String username;
              // password属性
              private String password;
              // sex属性
              private String sex;
              // 构造函数
              public User(String username, String password, String sex) {
                    super();
                    this.username = username;
                    this.password = password;
                    this.sex = sex;
              }
              // 属性的settergetter方法
              public String getUsername() {
                    return username;
              }
              public void setUsername(String username) {
                    this.username = username;
              }
              public String getPassword() {
                    return password;
              }
              public void setPassword(String password) {
                    this.password = password;
              }
              public String getSex() {
                    return sex;
              }
              public void setSex(String sex) {
                    this.sex = sex;
              }
        }

在Action中添加一个getUserList()方法,在该方法中新建一个ArrayList实例,并向其添加数据,代码如下所示。

        package net.hncu.action;
        import java.util.ArrayList;
        import java.util.List;
        import net.hncu.bean.User;
        import com.opensymphony.xwork2.ActionSupport;
        public class ReportAction   extends ActionSupport{
              //返回User集合
              public List getUserList() {
                    //新建ArrayList
                    List users = new ArrayList();
                    //ArrayList中添加User
                    users.add(new User("张三", "1234", ""));
                    users.add(new User("李四", "1234", ""));
                    users.add(new User("王五", "1234", ""));
                    return users;
              }
              public String execute() throws Exception {
                    return SUCCESS;
              }
        }

12.6.3 设计报表设计文件

使用iReport工具设计报表设计文件。为了能显示Action中的User,需要增加3个文本字段,并配置文本字段的name属性与User类中属性相对应。

首先找到“Document structure”视图窗口。在该视图窗口中选择“add”→“Field”选项,打开文本字段添加对话框。通过该对话框配置文本字段的名称以及数据类型,如图12.44所示。

添加完成文本字段后,可以将其直接拖曳到设计面板中,如图12.45所示。

图12.44 添加文本字段

图12.45 设计报表

编译该报表设计文件,将生成的jasper格式文件复制到Web应用中。

12.6.4 配置Action

配置该Action非常简单,只需为该Action指定一个类型为jasper的Result。同时可以为该Result指定3个参数:location、format和dataSource,分别用来指定jasper格式文件所在路径、生成报表格式以及报表使用数据源,代码如下所示。

        <? xml version="1.0" encoding="UTF-8" ? >
        <! DOCTYPE struts PUBLIC
            "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
            "http://struts.apache.org/dtds/struts-2.0.dtd">
          <struts>
              <! -- 自己的包继承jasperreports-default -->
                <package name="struts2" extends="jasperreports-default">
                    <! -- 定义loginAction,其实现类为net.hncu.action.ReportAction-->
                    <action name="showReport" class="net.hncu.action.ReportAction">
                          <! -- 定义处理结果与视图资源之间的关系 -->
                          <result name="success" type="jasper">
                                <! -- 指定报表设计文件所在路径 -->
                                <param name="location">jasper\struts_report.jasper</param>
                                <! -- 指定生成报表格式 -->
                                <param name="format">HTML</param>
                                <! -- 指定报表使用数据源-->
                                <param name="dataSource">userList</param>
                          </result>
                    </action>
                </package>
            </struts>

12.6.5 生成JasperReports报表

配置完该Action后,就可以生成报表了。打开浏览器,运行showReport.action。这时可以看到生成报表,如图12.46所示。

图12.46 显示报表