引用可以讓模板設計者生成動態內容,而指令允許設計者真正的負責頁面的展現和內容。
指令是以#開頭,后面緊跟一個關鍵字,比如if,else,foreach等。而這個關鍵字,是可以被放在{}中間的。這是規范的寫法,但是可能不好看。
#set
#set指令用於向一個變量或者屬性賦值。其格式為 #set($foo="bar")或者#set($foo.bar=$test) 。
LHS必須是一個變量或者屬性,RHS必須是以下7種類型之一:變量、屬性、字符串字面值、數字字面值、方法、ArrayList、Map。比如:
1 #set( $test = $test2 + 3) 2 3 #set( $test.a = "abc") 4 5 #set( $test.b = 1) 6 7 #set( $test.c = $test.a) 8 9 #set( $test.d = $test.calc("1+1")) 10 11 #set( $test.e = ["123", "abc", $test.c]) 訪問時使用$test.e.get(0)就可以獲得值"123" 12 13 #set( $test.f = {"name":"car", "color":"red"}) 訪問時使用$test.f.get("color")就可以獲得值"red"
默認情況下,RHS是null的話,將不會對LHS進行賦值,LHS會保持原來的值。所以一個引用一旦被創建,一般是無法移除的。但是可以修改Velocity的某個配置,改變這一現象。在#foreach里進行判斷時,要特別注意。
在使用#set時,字符串的字面值如果放在雙引號里,將會被解析。比如#set( $test.a = "abc"), 那么$test.a的值就是abc。而#set( $test.b = "$test.a")等價於#set( $test.b=$test.a )。但是#set( $test.b = '$test.a') 的結果卻是把$test.a這個字符串字面值賦值給$test.b。
當遇到需要輸出大量的字符串字面值,而不是輸出它們的實際值的情況時,可以使用#literal() ... #end來包圍VTL Code。
以上來源:http://www.cnblogs.com/yuepeng/archive/2010/11/23/1885257.html
值得注意的地方:在vm文件中進行加減運算的時候
所有操作符的兩邊都要加一個空格。