发布于 2016-05-16 15:30:47 | 457 次阅读 | 评论: 0 | 来源: PHPERZ
指令允许模板设计者生成Web网站的动态内容,而指令——易于使用脚本元素能用于创建操作Java代码输出——允许Web设计者真正负责Web网站的外观和内容。
指令总是以#开始。如同引用,指令的名字可以通过{和}符号括起来。通常文本紧随其后。例如以下产生错误:
#if($a==1)true enough#elseno way!#end
在这种情况下,使用花括号分隔#else。
#if($a==1)true enough#{else}no way!#end
#set指令用于设置引用的值。值能复制给变量引用或属性引用,这发生在括号中:
#set( $primate = "monkey" )
#set( $customer.Behavior = $primate )
等于号左边必须是一个变量引用或属性引用。右边可以是以下类型:
变量引用
字符串字面值
属性引用
方法引用
数值字面值
ArrayList
Map
#set( $monkey = $bill ) ## variable reference
#set( $monkey.Friend = "monica" ) ## string literal
#set( $monkey.Blame = $whitehouse.Leak ) ## property reference
#set( $monkey.Plan = $spindoctor.weave($web) ) ## method reference
#set( $monkey.Number = 123 ) ##number literal
#set( $monkey.Say = ["Not", $my, "fault"] ) ## ArrayList
#set( $monkey.Map = {"banana" : "good", "roast beef" : "bad"}) ## Map
注意:ArrayList例子中的元素使用[...]定义操作符,定义在ArrayList类中的方法都可以访问。因此,例如,你可以使用$monkey.Say.get(0)访问第一个元素。
类似,Map的例子,元素定义在{}操作符中,可以使用定义在Map类中的方法访问。因此,例如,你可以使用$monkey.Map.get("banana")访问第一个元素返回一个字符串“good”,或$monkey.Map.banana返回相同值。
等号右边也可以是简单的算术表达式:
#set( $value = $foo + 1 )
#set( $value = $bar - 1 )
#set( $value = $foo * $bar )
#set( $value = $foo / $bar )
如果右边是计算为null的属性或方法引用,它将不赋值给左边。依赖于Velocity的配置。通常这种机制不能够删除已存在的引用。
#set( $result = $query.criteria("name") )
第一个查询的结果是$result
#set( $result = $query.criteria("address") )第二个查询的结果是$result
如果$query.criteria("name")返回字符串“bill”,而$query.criteria("address")返回null,上面VTL将渲染为:
第一个查询的结果是bill
第二个查询的结果是bill
当使用#set指令时,封闭在双引号里面的字符串字面值将被解析和渲染:
#set( $directoryRoot = "www" )
#set( $templateName = "index.vm" )
#set( $template = "$directoryRoot/$templateName" )
$template
输出:
www/index.vm
然而,当字符串字面值封装在单引号中时,它将不被解析:
#set( $foo = "bar" )
$foo
#set( $blargh = '$foo' )
$blargh
渲染为:
bar
$foo
默认,这种在Velocity中使用单引号渲染未解析的文本是有效的。该默认能通过velocity.properties编辑,例如stringliterals.interpolate=false。
#[[不解析我!]]#语法允许模板设计者易于在VTL代码中使用大块的不解释和不解析内容。
#[[
#foreach ($woogie in $boogie)
nothing will happen to $woogie
#end
]]#
渲染为:
#foreach ($woogie in $boogie)
nothing will happen to $woogie
#end