您的位置:首页 > 其它

Velocity用户指南(中文版)(3)(完)

2008-04-25 05:34 375 查看
指令(Directives)引用允许模板设计者为Web站点生成动态内容,而指令使巧妙处理Java代码的脚本元素容易使用。1#set格式:#set(LHS=RHS)lLHS可以是变量引用或属性引用lRHS可以是引用、字符串、数字、ArrayList或Map下面的例子展示了上面的每种RHS类型:
#set($monkey=$bill)##variablereference
#set($monkey.Friend="monica")##stringliteral
#set($monkey.Blame=$whitehouse.Leak)##propertyreference
#set($monkey.Plan=$spindoctor.weave($web))##methodreference
#set($monkey.Number=123)##numberliteral
#set($monkey.Say=["Not",$my,"fault"])##ArrayList
#set($monkey.Map={"banana":"good","roastbeef":"bad"})##Map
对于ArrayList和Map,可以使用对应的Java方法访问其中的元素值:
$monkey.Say.get(0)
$monkey.Map.get("bannana")
$monkey.Map.banana##sameasabove
lRHS可以是简单的算术表达式
#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
算术表达式只支持整型。/的结果为整数;如果非整型数值,返回nulll如果RHS的结果为null,是不会赋值给LHS的看下面的例子:
#set($criteria=["name","address"])
#foreach($criterionin$criteria)
#set($result=$query.criteria($criterion))
#if($result)
Querywassuccessful
#end
#end
上面使用$result检查是否执行成功是有问题的。如果第一次执行成功,$result不为null,则后面的执行不管是否成功,检查条件总是成立。改进的方法是在每次执行前初始化为false:
#set($criteria=["name","address"])
#foreach($criterionin$criteria)
#set($result=false)
#set($result=$query.criteria($criterion))
#if($result)
Querywassuccessful
#end
#end
lString文字可以使用双引号或单引号括起。两者的主要区别是双引号中的引用会替换成相应的值,而单引号中的引用原样输出
#set($directoryRoot="www")
#set($templateName="index.vm")
#set($template="$directoryRoot/$templateName")
$template
输出结果是:www/index.vm如果使用单引号:
#set($template='$directoryRoot/$templateName’)
输出结果是:$directoryRoot/$templateNamel使用双引号可以实现字符串的串联,如下面的例子:
#set($size="Big")
#set($name="Ben")
#set($clock="${size}Tall$name")
Theclockis$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)3)循环:foreach下面是一个例子:
#foreach($productin$allProducts)
$product
#end
$allProducts的内容可以是Vector、Hashtable或ArrayList,每次取出一个值赋值给$product;返回的值是一个Java对象,可以用来引用具体的方法。下面的例子假设$allProducts是Hashtable对象:
#foreach($keyin$allProducts.keySet())
Key:$key->Value:$allProducts.get($key)
#end
Velocity提供了访问循环计数变量的简单方法:
#foreach($customerin$customerList)[/code]
$VelocityCount$customer.Name
#end
$VelocityCount是Velocity表示循环计数的内部变量,缺省开始值为1。该设置在Velocity.properties文件中定义:
#Defaultnameoftheloopcounter
#variablereference.
directive.foreach.counter.name=VelocityCount
#Defaultstartingvalueoftheloop
#countervariablereference.
directive.foreach.counter.initial.value=1
可以在#foreach指令中使用范围操作符[n..m],其中n和m必须是整型:
Firstexample:
#foreach($fooin[1..5])
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: