VTL变量的语法描述如下:
$[ ! ][ { ] [a-z,A-Z][a-z,A-Z,0-9,-_]*[ } ]
Velocity不支持自动类型转换,请看下面两个对比
#set($foo="9") #set($foo=$foo + 1) $foo
#set($foo=9) #set($foo=$foo + 1) $foo
只有后面这个会输出期望的结果 10
VTL 属性的语法描述如下:
$[ ! ][ { ] [a-z,A-Z][a-z,A-Z,0-9,-_]*. [a-z,A-Z][a-z,A-Z,0-9,-_]* [ } ]
VTL 方法的语法描述:
$[ ! ][ { ] [a-z,A-Z][a-z,A-Z,0-9,-_]*. [a-z,A-Z][a-z,A-Z,0-9,-_]* ( [parameter list] ) [ } ]
VTL方法和属性的主要区别在于,用户可以为方法指定参数列表
VTL中,直接使用属性名可以作为VTL方法的缩写。$customer.address 等价于 $customoer.getAddress
下面是一个测试程序:
MyTest.java
//
public class MyTest extends ScreenBase {
protected void execute(RunData rundata, TemplateContext context) throws WebxException {
List list = new ArrayList();
list.add("hello");
list.add("world");
Map map = new HashMap(8);
map.put("fruit1", "banana");
map.put("fruit2", "apple");
int[] num = {1,2,3,4};
Customer cust = new Customer();
cust.setAddress("HangZhou");
cust.setTelNum("1373226");
context.put("num", num);
context.put("list", list);
context.put("customer", cust);
context.put("fruits", map);
}
}
/
myTest.vm
/
遍历list
br>
#foreach($str in $list)
$velocityCount $str
<br/>
#end
遍历数组br>
#foreach($i in $num)
$velocityCount $i
<br/>
#end
遍历mapbr>
<ul>
#foreach($key in $fruits.keySet())
<li>Key: $key -> Value: $fruits.get($key)li>
#end
ul>
取出数组的指定位置元素br>
第二个元素 ->
$num.get(1)br>
取出list的指定位置元素br>
第二个元素 ->
$list.get(1)br>
取出map的指定key的valuebr>a
key为fruit1的value ->
$fruits.get("fruit1")br>
$fruits.fruit1br>
设置自定义类型的属性值br>
$customer.setAddress("Beijing")
取得自定义类型的属性值br>
$customer.addressbr>
$customer.getAddress()br>
/