• 沒有找到結果。

Velocity 实例分析

在文檔中 第一部分: (頁 133-138)

第八章 多视图

8.1.3 Velocity 实例分析

这个小节通过一个例子来展示如何用 Velocity 来进行编程。

在 MyEclipse 中新建一个 Views 工程,这个项目除了那些必须的包这之外还要有其他包,

具体有哪些包见图 8-1。这些包有些在 struts-2.0.9-all.zip 可以找到,但是有些没有,那读者 就要自己去下载。

注意:这个网址http://source.sakaiproject.org/maven/ 可以下到大部分的 jar 包。在之前所有

用到 velocity 视图的例子都应该包含这些 jar 包,其中 avalon-logkit-2.1.jar 尤为重要。

图 8-1 项目需要的包

用 Velocity 来显示 Action 中数据,在这里我先定义一个 NBATeam 类,包含三个私有属 性:teamName,superStar,num。具体代码如下:

NBATeam.java package view.test;

public class NBATeam {

//定义一个球队的四个成员变量 private String teamName;

private String superStar;

private Long num;

//默认的不带参数的构造函数 public NBATeam() {

super();

}

/带参数的构造函数

public NBATeam(Long num,String teamName,String superStar) { super();

this.num = num;

this.teamName = teamName;

this.superStar = superStar;

}

/*省略 get、set 方法*/

}

在这个类中有两个不同构造函数,由于参数不同,将会调用不同的构造函数。接下来就 是三个私有数据的 setXXX()方法和 getXXX()方法。super()表示调用超类的构造函数。

接下来就看看 Action 是怎样的。

ViewAction.java

package view.test.action;

/*省略导入的包*/

@SuppressWarnings("serial")

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

public String execute() throws Exception {

//构造四个 NBA 球队,调用带参数的构造函数

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");

myList = new ArrayList<NBATeam>();

//把新建好的四个球队插入一个链表 NBATeam 的 List,先创建一个对象名为 myList 的链表,然后再把先前创建好的四个 NBATeam 插入 myList。这样有关 NBATeam 的内容就全部存放在 myList 中,要显示的时候将其里面 的对象取出来就可以了。接下来看看 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">

<!-- 配置自定义的 Action 名字以及类 -->

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

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

</action>

</package>

</struts>

上面的代码就是增加一个 Action 的相关配置,让 ViewAction 类和名字为 myVelocityTest 的 Action 关联起来,最后成功后返回 NBATEAMShow.vm 的页面,这就是一个 Velocity 编 写的页面。

至于 web.xml 中的设置跟以前的配置还是一样,内容如下:

web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app id="WebApp_9" version="2.4"

xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<display-name>VIEWS</display-name>

<filter>

<title>This Page Generates Velocity Texts</title>

</head>

<body>

<h1>NBAteam Describe</h1>

<hr/>

</body>

</html>

由于有四个 NBATEAM 要显示,那就必须得用循环指令了,可以看看前面的语法,循 环使用#foreach/#end,$NBATeam in $myList 表示在 myList 中的所有 NBATeam 类型的数据,

当 全 部 取 出 之 后 , 循 环 就 会 结 束 。 $NBATeam.teamName , $NBATeam.superStar ,

$NBATeam.num 这当然就是 NBATeam 三个私有数据的引用咯,是不是很简便啊!在显示的 时候用到了表格的形式,只是简单建了一张表。这样整个 Velocity 就算配置成功了,来看看 目录,如图 8-2 所示:

图8-2 工程Views的目录

在浏览器中输入:http://localhost:8080/Views/myVelocityTest.action,效果如图 8-3 所示。

图8-3Velocity的效果图

看完整个 Volecity 不知道读者会有什么收获,其实可以用 JSP 来写上面的例子,读者就 会发现用 JSP 将是多么不方便的一件事。

这一节从 Velocity 的基础开始一点点介绍到语法,再通过实例来运行,希望能引起读者 们都 Velocity 的兴趣。当然模板引擎还有很多,下节就会见到另外一种。

8.2 FreeMarker

除了 Velocity 之外还有一种模板引擎,在 Struts2 中已经开始推荐使用 FreeMarker 了,

从下载的 struts-2.0.9-all.zip 中自带 freemarker-2.3.8.jar 就可以看出这点,如果要使用 Velocity 还要自己去下载上面提到的那些包。可以这么说,FreeMarker 的功能比 Velocity 更强大,对 于大多数应用程序,FreeMarker 比 Velocity 工作更简单,FreeMarker 实现了许多 Velocity 没 实现的功能。在介绍完 FreeMarker 之后,再回过头来看看它们的区别。

在文檔中 第一部分: (頁 133-138)