VTL有3種類型的引用:變量、屬性和方法。作為一個設計者,必須和Java工程師在VTL引用的名稱(辨別符)上一緻,以便在模闆中使用它們。引用是作為String對象處理的。
(1)變量
變量的格式:$VTL辨別符
VTL辨別符以字母開始,由字母、數字、橫劃線(-)或下劃線(_)組成。變量或者從模闆中的set指令獲得值(如前面的例子),或者Java代碼(同名變量)中獲得值。Velocity隻處理已定義的變量引用,對于沒有定義的變量引用,Velocity原樣傳回。例如下面的例子:
#set( $foo = "gibbous" )
$moon = $foo
輸出結果是:$moon = gibbous
(2)屬性
屬性的格式:$VTL辨別符. VTL辨別符
下面是屬性引用的例子:
$customer.Address
$purchase.Total
拿第一例子來說,有兩種意思:
l 傳回Hashtable對象customer中鍵值為Address的值
l $customer.getAddress()方法引用的縮寫(JavaBean屬性的getter方法)
至于是哪種情況,Velocity會做決定,傳回合适的值。
(3)方法
方法的格式:$VTL辨別符(參數清單)
下面是方法引用的例子:
$customer.getAddress()
$purchase.getTotal()
$page.setTitle( "My Home Page" )
$person.setAttributes( ["Strange", "Weird", "Excited"] )
前面兩個例子可以縮寫成屬性引用(如屬性引用的例子)。屬性引用和方法引用的主要差別是方法引用可以指定參數清單。
(4)正式引用符号:{}
正式引用符号在使用變量引用含糊的地方進行區分。看下面的例子:
#set( $vice = "klepto" )
Jack is a $vicemaniac.
輸出結果是:Jack is a $vicemaniac.($vicemaniac沒有定義,原樣輸出)
#set( $vice = "klepto" )
Jack is a ${vice}maniac.
輸出結果是:Jack is a kleptomaniac.(使用正式引用符号将$vice和其它文本區分開)
(5)Quit引用符号:!
看下面的例子:
初始時,$email沒有值,是以文本框中會顯示值$email,而更希望是空白。下面是使用Quit引用符号的例子:
當$email沒有值時,Velocity會用空串替代$email。
(6)特殊字元轉義
對于$、#等特殊字元要正常顯示,可以使用/進行轉義,//轉義為/。下面是一個例子:
#set( $email = "foo" )
$email
/$email
//$email
///$email
輸出結果是:
foo
$email
/foo