VTL 属性可以作为 VTL 方法的缩写。$customer.Address 属性和使用$customer.getAddress()方法具有相同
的效果。如果可能的话使用属性的方式是比较合理的。属性和方法的不同点在于你能够给一个方法指定一
个参数列表。
非正式定义能够用下面的方法:
$sun.getPlanets()
$annelid.getDirt()
$album.getPhoto()
我们期待那些方法返回属于太阳系的行星的名称,喂养我们的蚯蚓,或者从相册里面取出一张照片。
只有长符号为下面的方法服务。
$sun.getPlanet( ["Earth", "Mars", "Neptune"] )
## Can't pass a parameter list with $sun.Planets
$sisyphus.pushRock()
## Velocity assumes I mean $sisyphus.getRock()
$book.setTitle( "Homage to Catalonia" )
## Can't pass a parameter list
正式 reference 标记
非正式 references 用于上述的例子中。但是同样有正式的 references,如下面所示:
${mudSlinger}
${customer.Address}
${purchase.getTotal()}
在几乎所有场合你都可以使用非正式 references,但是在某些场合,只能使用正式 reference 才能
正确处理。
设想你创建一个句子:$vice 作为句子的名词 。目标是为了使某些人选择不同的词,产生下面两种
结果之一:"Jack is a pyromaniac." 或者 "Jack is a kleptomaniac."。使用非正式定义不太适合用
于这种情况。看一下下面的例子:
Jack is a $vicemaniac.
本来变量是$vice 现在却变成了$vicemaniac,这样 Veloctiy 就不知道您到底要什么了。所以,应该
使用正是格式书写
Jack is a ${vice}maniac.
现在 Velocity 就知道 reference 是$vice,而不是$vicemaniac。正式定义经常用于模板中 refernces
与文本连接在一起的情况。
Quiet reference notation
当 Velocity 遇到没有定义的 reference,通常它会直接输出 reference。例如:假如下面的 reference
出现在一个 VTL 模板中:
<input type="text" name="email" value="$email"/>
当 form 最初加载的时候,变量$email 没有值,但你想出现一个空白的文本框设定值为“$email”。
使用 quiet reference notation 可以使 Velocity 正常显示,你需要用$!email ,代替$email。所以上面的例子,
会改成下面: