Velocity 基本語法


Velocity 基本語法

Velocity 是一個基於 Java 的模板引擎框架,提供的模板語言可以使用在 Java 中定義的對象和變量上。Velocity 是 Apache 基金會的項目,開發的目標是分離 MVC 模式中的持久化層和業務層。但是在實際應用過程中,Velocity 不僅僅被用在了 MVC 的架構中,還可以被用在以下一些場景中。

  1. Web 應用:開發者在不使用 JSP 的情況下,可以用 Velocity 讓 HTML 具有動態內容的特性。

  2. 源代碼生成:Velocity 可以被用來生成 Java 代碼、SQL 或者 PostScript。有很多開源和商業開發的軟件是使用 Velocity 來開發的。

  3. 自動 Email:很多軟件的用戶注冊、密碼提醒或者報表都是使用 Velocity 來自動生成的。使用 Velocity 可以在文本文件里面生成郵件內容,而不是在 Java 代碼中拼接字符串。

  4. 轉換 xml:Velocity 提供一個叫 Anakia 的 ant 任務,可以讀取 XML 文件並讓它能夠被 Velocity 模板讀取。一個比較普遍的應用是將 xdoc 文檔轉換成帶樣式的 HTML 文件。

基本模板語言語法使用
在 hellovelocity.vm 里面可以看到很多以 #$符開頭的內容,這些都是 Velocity 的語法。在 Velocity 中所有的關鍵字都是以 # 開頭的,而所有的變量則是以$開頭。Velocity 的語法類似於 JSP 中的 JSTL,甚至可以定義類似於函數的宏,下面來看看具體的語法規則。
一、變量
和我們所熟知的其他編程語言一樣,Velocity 也可以在模板文件中有變量的概念。
變量定義

#set($name =“velocity”)

等號后面的字符串 Velocity 引擎將重新解析,例如出現以$開始的字符串時,將做變量的替換。

#set($hello =“hello $name”)

上面的這個等式將會給$hello 賦值為“hello velocity”

變量的使用

在模板文件中使用$name 或者${name} 來使用定義的變量。推薦使用${name} 這種格式,因為在模板中同時可能定義了類似$name$names 的兩個變量,如果不選用大括號的話,引擎就沒有辦法正確識別$names 這個變量。
對於一個復雜對象類型的變量,例如$person,可以使用${person.name} 來訪問 person 的 name 屬性。值得注意的是,這里的${person.name} 並不是直接訪問 person 的 name 屬性,而是訪問 person 的 getName() 方法,所以${person.name}${person.getName()} 是一樣的。

變量賦值

在第一小點中,定義了一個變量,同時給這個變量賦了值。對於 Velocity 來說,變量是弱數據類型的,可以在賦了一個 String 給變量之后再賦一個數字或者數組給它。可以將以下六種數據類型賦給一個 Velocity 變量:變量引用, 字面字符串, 屬性引用, 方法引用, 字面數字, 數組列表。

#set($foo = $bar) #set($foo =“hello”) #set($foo.name = $bar.name) #set($foo.name = $bar.getName($arg)) #set($foo = 123) #set($foo = [“foo”,$bar])

二、循環
在 Velocity 中循環語句的語法結構如下:

#foreach($element in $list) This is $element $velocityCount #end

Velocity 引擎會將 list 中的值循環賦給 element 變量,同時會創建一個$velocityCount 的變量作為計數,從 1 開始,每次循環都會加 1.
三、條件語句
條件語句的語法如下

#if(condition) ... #elseif(condition) ... #else ... #end

四、關系操作符
Velocity 引擎提供了 AND、OR 和 NOT 操作符,分別對應&&、||和! 例如:

#if($foo && $bar) #end

五、宏
Velocity 中的宏可以理解為函數定義。定義的語法如下:

#macro(macroName arg1 arg2 …) ... #end

調用這個宏的語法是:

#macroName(arg1 arg2 …)

這里的參數之間使用空格隔開,下面是定義和使用 Velocity 宏的例子:

#macro(sayHello $name) hello $name #end #sayHello(“velocity”)

輸出的結果為 hello velocity

六、#parse#include

#parse#include 指令的功能都是在外部引用文件,而兩者的區別是,#parse 會將引用的內容當成類似於源碼文件,會將內容在引入的地方進行解析,#include 是將引入文件當成資源文件,會將引入內容原封不動地以文本輸出。分別看以下例子:

foo.vm 文件:

#set($name =“velocity”)

parse.vm

#parse(“foo.vm”)

輸出結果為:velocity

include.vm:

#include(“foo.vm”)

輸出結果為:#set($name =“velocity”)

以上內容包含了部分 Velocity 的語法,詳細的語法內容可以參考 Velocity 的官方文檔。

寫於 2015-07-14


免責聲明!

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



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