指令(Directives)
引用允许模板设计者为Web站点生成动态内容,而指令使巧妙处理Java代码的脚本元素容易使用。
(1)#set
格式:#set( LHS = RHS )
l LHS可以是变量引用或属性引用
l RHS可以是引用、字符串、数字、ArrayList或Map
下面的例子展示了上面的每种RHS类型:
#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和Map,可以使用对应的Java方法访问其中的元素值:
$monkey.Say.get(0)
$monkey.Map.get("bannana")
$monkey.Map.banana ## same as above
l RHS可以是简单的算术表达式
#set( $value = $foo + 1 ) ## Addition
#set( $value = $bar - 1 ) ## Subtraction
#set( $value = $foo * $bar ) ## Multiplication
#set( $value = $foo / $bar ) ## Division
#set( $value = $foo % $bar ) ## Remainder
算术表达式只支持整型。/的结果为整数;如果非整型数值,返回null
l 如果RHS的结果为null,是不会赋值给LHS的
看下面的例子:
#set( $criteria = ["name", "address"] )
#foreach( $criterion in $criteria )
#set( $result = $query.criteria($criterion) )
#if( $result )
Query was successful
#end
#end
上面使用$result检查是否执行成功是有问题的。如果第一次执行成功,$result不为null,则后面的执行不管是否成功,检查条件总是成立。改进的方法是在每次执行前初始化为false:
#set( $criteria = ["name", "address"] )
#foreach( $criterion in $criteria )
#set( $result = false )
#set( $result = $query.criteria($criterion) )
#if( $result )
Query was successful
#end
#end
l String文字可以使用双引号或单引号括起。两者的主要区别是双引号中的引用会替换成相应的值,而单引号中的引用原样输出
#set( $directoryRoot = "www" )
#set( $templateName = "index.vm" )
#set( $template = "$directoryRoot/$templateName" )
$template
输出结果是:www/index.vm
如果使用单引号:
#set( $template = '$directoryRoot/$templateName’ )
输出结果是:$directoryRoot/$templateName
l 使用双引号可以实现字符串的串联,如下面的例子:
#set( $size = "Big" )
#set( $name = "Ben" )
#set($clock = "${size}Tall$name" )
The clock is $clock.
(2)#if / #elseif / #else
#if指令在条件成立时,显示#if和#end之间的内容,否则显示#else和#end之间的内容。下面是一个例子:
#if( $foo )
Velocity!
#end
条件成立有两种情况:
l 如果$foo是boolean,则$foo要为true;
l 否则,$foo不为null
#if指令中可以使用的关系和逻辑符号包括:
l <、<=、==、>=、>
l &&(and)、||(or)、!(not)