天天看點

Velocity使用者指南(中文版)(2)

引用 (References)

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      

/$email