2017年2月27日星期一

跳出#break与停止#stop

跳出#break可用于停止当前执行的指令,如:
1、if分歧满足一定条件后,停止分歧判断,跳出if分歧语句,执行下一个动作
2、foreach循环到某个条件时,停止循环,跳出foreach循环语句,执行下一个动作。

停止#stop即停止当前模版的解析,不再进行下一动作。一般用于调试工作。

引用变量给同一变量进行重复定义

当对一个变量进行重复定义时。
#set($v = $a)
#set($v = $b)
1、$a、$b均不为空值
$v输出为$b的值
2、$a不为空值,$b为空值
$v输出为$a的值
3、$a为空值,$b不为空值
$v输出为$b的值

由于引用变量赋值时不能重设为空值,所以在使用#foreach/#if语句时需要注意进行判断。通过#set($v = "")赋予空值。

变量的输出

.toString()

将Integer对象转变为String输出。如:$customer.age.toString()

指针

以下均为有效的例子
  • $customer.msg[0]
  • $customer.msg[$i]
  • $customer.msg["velocity"]
  • $customer.msg[0].value
  • $customer.getMsg()[0]
  • $customer.msg[0][0]
赋值时可以使用#set来实现。

必须使用{}的情况

当输出变量与英文字母直接相连时,如:
$aapple,则需要使用{}来正式定义变量:${a}apple

当你为对变量赋值或值为空时,Velocity会直接以"$变量名"的形式输出。为了防止这种情况的发生,可通过添加静默符号"!",如:$!name
推荐使用$!{name}来输出变量。

强制直接输出变量名则在前加“\”,即“\!name”。

属性Property与方法Methods

VTL(Velocity Template Language)输出变量时可以通过属性或Java方法来实现。

由$定义值+"."+另一个定义值,如:
$customer.address
有两个含义。1、查找customer的散列表,并返回名为address关联的值;2、是$customer.getAddress()的简写。当请求发生时,Velocity将判断哪种是有意义的并返回对应的值。

在使用Java方法来实现时,还可以传递参数。
$customer.setName("Velocity")

虽然$customer.address和$customer.getAddress有完全相同的效果,但通常被建议使用属性来实现。它们之间的差别在于可以为方法指定参数列表。

从Velocity 1.6开始,若数组为固定长度的列表,则可以调用java.util.list方法。如:

  • $myArray.isEmpty()
  • $myArray.size()
  • $myArray.get(2)
  • $myArray.set(1, 'Velocity')

Velocity 1.6之后也支持vararg方法。

Velocity分析属性的规则

对于以小写字母开头的属性,如:$customer.address。查找顺序为:

  1. getaddress()
  2. getAddress()
  3. get("address")
  4. isAddress()

而若以大写开头的属性,如:$customer.Address。查找顺序为:

  1. getAddress()
  2. getaddress()
  3. get("Address")
  4. isAddress()

故而建议在定义属性时不要依赖于大小写来区别属性。