Velocity中#set指令


引用可以讓模板設計者生成動態內容,而指令允許設計者真正的負責頁面的展現和內容。

指令是以#開頭,后面緊跟一個關鍵字,比如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文件中進行加減運算的時候

所有操作符的兩邊都要加一個空格。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM