• 沒有找到結果。

JasperReport 实例分析

在文檔中 第一部分: (頁 145-150)

switch 指令

8.3.2 JasperReport 实例分析

通过第一节的描述,发现对于 JasperReport 的开发不是很困难,比较棘手的是.jrxml 文 档的编写,上面只是简单的“Hello World!”的输出,如果想写更难的,自己去写就很难了,

不过可以借助一些可视化的工具去开发。笔者用的是 iReport1.3.1,其界面如图 8-7 所示。

图8-7 iReport的界面

至于怎么去用它,这里不会详细的讲解,有兴趣的读者可以自学。下面仅对本例中用到 模板加以解释。在这个工具里先新建一个模板,取名为 NBA。由于整个操作都是可视化设 计,只要添加一些元素就可以了。下面是用例的完整模板以及相关解释,图 8-8 显示了创建 好的模板。

图8-8 创建好的模板

在红色标记的工具栏上有 T,F 字样的两个标签,一个表示静态文本,一个表示与数据 相关的动态元素,静态文本可以放在任何区域里,通过对其属性进行赋值之后,就会简单在 生成的页面上显示出来;在 detail 区域里一般放与数据相连的动态元素,然后进行一些属性 的配置,一般是和数据库中的表单元素进行关联,最后就会按照读者摆放的位置,把数据库 中的数据按照想要的方式显示出来,至于这个例子,没必要进行数据库连接。读者可以参照 做好的模板图去设计,然后再比较一下源代码,进行相应的修改。具体就不说了,在这里不 是重点,读者自己可以再仔细研究,它的功能是非常强大的。NBA.jrxml 具体代码可以参见 附赠光盘或者后面附录。

读者可以自己把这个 xml 文件通过记事本等其他工具打开看看源代码,会发现自己要 写的话就太复杂了。具体的代码什么意思就不解释了,这个 NBA.jrxml 存放的路径和前面的 Velocity 以及 FreeMarker 模板存放的位置都是一样的。即:\Views\WebRoot\NBA.jrxml。在 这里其他的文件不用改变,只要 把 NBA.jrxml 添加到指定的路径就可以了,然后在 ViewAction.java 文件中稍作改变就可以了。具体代码如下:

ViewAction.java

package view.test.action;

/*省略导入的包*/

@SuppressWarnings("serial")

public class ViewAction extends ActionSupport { private List<NBATeam> myList;

public String execute() throws Exception { //构造四个 NBATeam 类的成员变量

NBATeam p1 = new NBATeam(new Long(6),"Bull","Jordan");

NBATeam p2 = new NBATeam(new Long(3),"Lakers","Kobe");

NBATeam p3 = new NBATeam(new Long(2),"Rocket","YaoMing");

NBATeam p4 = new NBATeam(new Long(3),"Spurs","Duncan");

//把刚新建的 NBATeam 对象插入链表 myList = new ArrayList<NBATeam>();

myList.add(p1);

"D:/Program Files/Apache Software Foundation/Tomcat 5.5/webapps/Views/NBA.jrxml",

"D:/Program Files/Apache Software Foundation/Tomcat 5.5/webapps/Views/NBA.jasper");

} catch (Exception e) { 可以显示的 NBA.jasper 文件。大家肯定很奇怪为什么路径怪怪的,对了,这个是 NBA.jrxml 文件在 Tomcat 中配置后这个文件位置。可以在 Tomcat 的安装目录下的\webapps\Views\可以 找到,但是不可以直接把目录复制张贴,发现在地址栏用的是“\”而在文件里用的是“/”。

只要把它们全部换一下就行了。通过 JasperCompileManager.compileReportToFile()的使 用,可以达到编译的目的。最后运行成功后会在 NBA.jrxml 的目录下生成一个 NBA.jasper 文件。下面来看看关于 JasperReport 的配置,当然还是 struts.xml 下配置:

struts.xml

<?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>

<constant name="struts.devMode" value="true" />

<package name="default" extends="struts-default">

<!--对 Velocity Action 进行相应类的关联 -->

<action name="myVelocityTest" class="view.test.action.ViewAction">

<result name="success" type="velocity">NBATEAMShow.vm</result>

</action>

<!--对 FreeMarker Action 进行相应类的关联 -->

<action name="myFreeMarkerTest" class="view.test.action.ViewAction">

<result name="success" type="freemarker">NBATEAMShow.ftl</result>

</action>

</package>

<package name="jasper" extends="jasperreports-default">

<!--对 JasperReport Action 进行相应类的关联 -->

<action name="myJasperTest" class="view.test.action.ViewAction">

<result name="success" type="jasper">

<param name="location">NBA.jasper</param>

<param name="dataSource">myList</param>

<param name="format">PDF</param>

</result>

</action>

</package>

</struts>

这个配置文件也就是整个项目完整的代码了。粗体部分我们是再单独增加了一个

<package>标签,导入的包名 jasperreports-default,为这是与其他项目不同的,在第五章的时 候我们就探讨过,JasperReports Result 的配置文件是在 struts2-jasperreports-plugin-2.0.9.jar 包中定义的,配置文件的名称为 struts-plugin.xml,具体内容如下:

struts-plugin.xml

<?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>

<package name="jasperreports-default">

<result-types>

<result-type name="jasper"

class="org.apache.struts2.views.jasperreports.JasperReportsResult"/>

</result-types>

</package>

</struts>

看了这个文件就会明白为什么会导入不同的包,以后只要用到 jasper 返回类型的,就要 进行这样的配置。

可以看到 jasper Result 有三个参数,一个是要显示的文件,一个是在 Action 文件里定义 的数据源 myList。最后一个就是要显示的格式,可以换成很多种,譬如 Excel 等等,笔者在 这演示的是用 PDF 格式。

下面检验一下结果对不对,在浏览器地址输入:

http://localhost:8080/Views/myJasperTest.action,效果如图 8-9 所示。

图8-9 PDF格式显示

这就是 PDF 的显示效果了。其实也可以换成其他的显示方式,读者可以自己去尝试。

只要在代码:

<param name="format">PDF</param>

中修改显示方式就行了。

8.4 小结

通过本章的学习,我们接触了 Velocity、FreeMarker 和 JasperReports。其实他们每一个 技术都可以写一部书,所以我们的重点只是放在 Struts2 中应该怎么使用这些视图。简单可 以回顾一下三种技术,它们都有各自的特点,Velocity 和 FreeMarker 很相似,他们的不同之 处前面已经进行详细的比较了。JasperReports 很特殊,它可以让页面呈现的形式变得很丰富,

不再是单一的 Web 页面。需要补充的就是,在这章分别用这三种技术来完成了一个相同的 实例,虽然实例比较简单,不过也算是入门了,更深层次的探讨就留给读者们自己研究。

在本章中所有视图都是在同一个数据源基础上完成的。可以看到不同的技术可以带给用 户不同的方便以及界面风格。读者可以在深入研究后选择自己最擅长的一种视图技术。所以 数据的存储是页面显示的前提,下一章就会详细介绍数据存储方面的问题。

在文檔中 第一部分: (頁 145-150)