Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象 ,开发的目标是分离 MVC 模式中的持久化层和业务层。 当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码从web页面中分离出来,这样为web站点的长期维护提供了便利,同时也为我们在JSP和PHP之外又提供了一种可选的方案。
Velocity脚本语法摘要(velocity中大小写敏感)
在 Velocity 中所有的关键字都是以 # 开头的,而所有的变量则是以$开头
1. 变量:${name} ,也可以写成:$name。提倡用前面的写法。
变量的赋值 : $name="hello"
赋值的左边必须是一个变量或者是属性引用。
右边可以是六种类型之一: 变量引用,字面字符串,属性引用,方法引用,字面数字,数组列表。
下面的例子演示了上述的每种类型:
#set( $monkey = $bill ) ## 变量引用
#set( $monkey.Friend = "monica" ) ## 字面字符串
#set( $monkey.Blame = $whitehouse.Leak ) ## 属性引用
#set( $monkey.Plan = $spindoctor.weave($web) ) ## 方法引用
#set( $monkey.Number = 123 ) ## 字面数字
#set( $monkey.Say = ["Not", $my, "fault"] ) ## 数组列表
注意:①如果上述例子中的右值是null, 则左值不会被赋值,也就是说会保留以前的值
②velocity模板中未被定义的变量将被认为是一个字符串
③velocity模板中不会将reference解释为对象的实例变量
例如:
$foo.name将被解释为Foo对象的getName()方法,而不是Foo对象的name实例变量。
$foo.getBar() 等同于$foo.bar ;
data.getRequest().getServerName() 等同于 $data.request.serverName 等同于${data.request.serverName}
2. 循环
#set( $list = ["pine", "oak", "maple"])
#foreach ($element in $list)
This is $element.
$velocityCount (据说可以得到循环次数,但是每次试验都没成功过)
#end
输出的结果为:
1 This is pine.
2 This is oak.
3 This is maple.
每次循环$list中的一个值都会赋给$element变量。
$list可以是一个Vector、Hashtable或者Array。分配给$element的值是一个java对象,并且可以通过变量被引用。
如果$list 是一个HashMap,则可以
#foreach ( $key in $list.keySet())
Key: $key
Value: $list.get($key) <br>#end
参考资料: