第十章: Velocity
一. Velocity介绍
Velocity是一种模板语言。
. 模板是用做文档基础的文本,预先设置好固定的文档结构,部分内容可以替换;
. 模板语言是一种标准的格式,用于定义文档中哪些变量需要被替换;
Velocity不仅支持变量的替换,还支持简单的控制结构(循环和if/else语句等)。
Velocity是一种运行期语言,JSP是一种静态的编译期语言。工具上对Velocity的支持通常是简陋的,甚至没有。
Velocity是一种模板语言,它读入模板文件,将一些数据放入模板中,然后将最后的结果显示出来。
. 数据来源:WebWork的值栈;
额外设置:
a. xwork.xml
velocity result作为webwork-default.xml的一部分内容,如你的xwork.xml不包含该文件,那你必须显示定义
名称为velocity的result类型:
<result-type name="velocity" class="com.opensymphony.webwork.dispatcher.VelocityResult"/>
b. webwork.properties
如果想自行设定不同的velocity.properties文件,配置额外的Velocity Context,或支持其他JSP标签等,必须
编辑webwork.properties文件,改写下面的值:
#velocity.properties文件的位置
webwork.velocity.configfile=velocity.properties
#链接至WebWork VelocityContext的VelocityContext类名列表
#列表使用逗号分隔
webwork.velocity.contexts=
#JSP标签包
webwork.velocity.tag.path=com.opensymphony.webwork.views.velocity.ui
c. velocity.properties
Velocity的标准配置包含于velocipty.properties文件中,这个配置并不是与WebWork特定相关的。如果要指定自定义的Velocity
宏或者改写Velocity模板装载的方式,那么可以指定自己的配置。
另webwork.vm文件里定义了velocimacro库。我们亦可自行定义该文件。
二. 基本语法和操作
1. 属性访问
Velocity使用常见的点号语法(dot syntax)。
如果某个Velocity表达式(如$fakeObject)返回null, 那么Velocity将直接把打表达式打印出来。如果此时不希望显示任何内容,
可以使用$!fackeObject。
2. 方法调用
调用Collections的size()方法:
Bids: $item.bids.size();
3. 循环语句
语法:
#foreach ($bid in $item.bids)
...
#end
在velocity中,指令符(directives)通过井号(#)标识。循环使用内建的指令符:foreach,它通过指定一个用于循环的变量
名称及需要循环迭代的值($item.bids)进行工作。
示例:
<html>
<head>
<meta contentType="gbk"/>
</head>
<body>
<h3><ww:iterator>遍历数组</h3>
#foreach ($value in $array)
$value<br>
#end
<h3><ww:iterator>遍历Collection</h3>
#foreach ($value in $list)
Name: $value.name
Password: $value.password <br>
#end
<h3><ww:iterator>遍历Map</h3>
#foreach ($value in $map.entrySet())
$value.key,$value.value <br>
#end
</body>
</html>
. $value变量在foreach指令符的参数表中被定义,而velocity使用这个变量名引用迭代过程中被迭代的对象;
. $velocityCount变量也被创建,它用于表示当前循环的计数,并且在其他任何foreach指令符中也同样适用。
. 当iterator标签对Map进行循环迭代的时侯,在每次循环中被迭代的对象是Map.Entry,而在velocity中是map的值。
如希望对 Map.Entry对象进行迭代,可使用 $map.entrySet()。
velocity并没有将值栈的概念,不过也可以手动实现将对象直接压入栈中,模拟iterator标签将每个被迭代的对象压
入值栈的现象:
<html>
<head>
<meta contentType="gbk"/>
</head>
<body>
<h3><ww:iterator>遍历数组</h3>
#foreach ($value in $array)
$value<br>
#end
<h3><ww:iterator>遍历Collection</h3>
#foreach ($value in $list)
$stack.push($value)
Name: $name
Password: $password <br>
#set ($trash = $stack.pop())
#end
<h3><ww:iterator>遍历Map</h3>
#foreach ($value in $map.entrySet())
$value.key,$value.value <br>
#end
</body>
</html>
4. 使用if/else指令符实现条件逻辑
语法:
#if($item.bids.size() > 0)
...
#else
...
#end
示例:
<html>
<head>
<meta contentType="gbk"/>
</head>
<body>
<h3><ww:iterator>遍历数组</h3>
#foreach ($value in $array)
$value<br>
#end
<h3><ww:iterator>遍历Collection</h3>
#foreach ($value in $list)
#if($velocityCount % 2 == 0)
<font color="black">
#else
<font color="red">
#end
Name: $value.name
Password: $value.password <br>
</font>
#end
<h3><ww:iterator>遍历Map</h3>
#foreach ($value in $map.entrySet())
$value.key,$value.value <br>
#end
</body>
</html>
通过if/else指令在刚才代码基础上实现不同颜色字体显示;
5. 变量赋值
在简化模板的过程中经常需要创建自有的Velocity变量,例如你并不希望在所有地方都使用$some.long.expression,
而是希望能够使用$sle作为它的别名,这时可以使用:
#set ($seller = $item.seller)
一旦采用这种方式进行变量赋值,那么对于剩下的页面,就可以直接引用$seller对象。这不仅免掉重复敲打键盘的烦恼,还
避免表达式被多次重复求值。
#set ($trash = $stack.pop())
这一行代码把值栈中移出的对象赋给$trash变量。这样做的目的是需要将对象从值栈中移出,却不希望显示出来。如单纯
$stack.pop()
,那么移出的对象就会被打印出来。
分享到:
相关推荐
webwork in action 第一部分:概貌 第二部分:核心内容 第三部分:内容的显示 第四部分:高级话题
根据提供的文件信息,本书《WebWork in Action》主要聚焦于Java WebWork框架的应用与实践,是一本详尽介绍WebWork框架各个方面的书籍。下面将基于标题、描述、标签及部分内容来提取并归纳出相关的IT知识点。 ### ...
webwork in action 中文版
webwork in action 中文版
webwork in action 中文版
《WebWork in Action》是一本专注于介绍WebWork框架的书籍,源代码的提供是为了让读者更深入地理解和实践书中的示例。WebWork是一个基于Java的MVC(模型-视图-控制器)框架,用于构建动态Web应用程序。它强调了代码...
webwork in action 的中文版,影印,高清晰,本人阅读中。非常不错。文件太大了,分了 15个压缩文件。每个文件1分。
真正的webwork in Action中文清晰完整版,还附有书上的示例代码,不同于其它的章节摘录版,模糊版,英文版...学习webwork的最佳教材
webwork in action 电子书
从书名“WebWork in Action”及简短的描述“WebWork in action”,可以看出这本书旨在通过实践的方式教授读者如何使用WebWork这一Java Web应用开发框架。下面我们将从几个关键章节入手,深入挖掘其中涉及的重要知识...
《Webwork.in.Action》是一本深入探讨Webwork框架的书籍,中文版的出现使得国内开发者能够更方便地学习和理解这一强大的Java web开发框架。Webwork是由一系列组件组成的MVC(Model-View-Controller)框架,它在Java...
"WebWork in Action"是一本专著,深入探讨了这个框架的各个方面,包括其设计理念、核心组件以及如何有效地利用它们来开发高效、可维护的Web应用。这本书通常会涵盖以下关键知识点: 1. **MVC架构**:WebWork遵循MVC...
webwork in action_第1部分-WebWork简介_第2章-WebWork方式的Hello World
in action系列想必同行人士都是知道的,相当的好,请大家下载来看,可以说得上是webwork的权威了
webwork in action 第一部分:概貌 第二部分:核心内容 第三部分:内容的显示 第四部分:高级话题
webwork.in.action中文pdf版 part5