Velocity 語法詳解


Velocity是基於Java的模板引擎,它允許頁面設計者引用Java中定義的方法。頁面設計者和Java開發者能夠同時使用MVC的模式開發網站,這樣網頁設計者能夠把精力放在頁面的設計上,程序員也可以把精力放在代碼開發上。Velocity把Java代碼從Web頁面中分離, 使網站可維護性更強,同時也在Java服務器頁面(JSPs)或者PHP中提供了可視化交互的選擇。

Velocity 可以被用在以下場景中:

  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 文件。

一、變量

1. 變量定義

velocity 中的變量是弱類型,大小寫敏感。

#set($name="velocity")

當使用 set 指令時,等號后面引號中的字面字符串將解析和重新解析,例如出現以  開始的字符串時,將做變量的替換。

#set($hello="hello $name")

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

2. 變量使用

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

3. 變量賦值

對於 Velocity 來說,變量是弱數據類型的,可以在賦了一個 String 給變量之后再賦一個數字或者數組給它。

賦值的左邊必須是一個變量或者屬性引用。

賦值的右邊可以是以下6種類型之一:

  • 變量引用
  • 字面字符串
  • 屬性引用
  • 方法引用
  • 字面數字
  • 數組列表
#set($foo = $bar)
#set($foo ="hello")
#set($foo.name = $bar.name)
#set($foo.name = $bar.getName($arg))
#set($foo = 123)
#set($foo = ["foo",$bar])

注:(1)如果上述例子中右值為 null,則左值不會被賦值,也就是說會保留以前的值。

  (2)Velocity 模板中未被定義的變量將會認為是字符串。例如:

#set($foo = $bar)
$foo

輸出結果:
$foo

 二、循環語句

#set($list=["velocity","freemarker","jsp"])

#foreach($element in $list)
    <p>${velocityCount}. This is ${element}</p>
#end

輸出結果:
1. This is velocity

2. This is freemarker

3. This is jsp

Velocity 引擎會將 list 中的值循環賦給 element 變量,同時會創建一個 $velocityCount 的變量作為計數,從 1 開始,每次循環都會加 1。

另外,Velocity 中還提供了得到循環次數的方法, $velocityCount 變量的名字是 Velocity 默認的名字。

#foreach($i in [1..3])
    $i
#end

輸出結果:
1 2 3

三、條件語句

#if($condition > 5)
    <p>condition > 5</p>
#elseif($condition == 5)
    <p>condition = 5</p>
#else
    <p>condition < 5</p>
#end

輸出結果:
condition = 5

四、關系操作符

Velocity 引擎提供了 AND、OR 和 NOT 操作符,分別對應 && 、|| 和 ! 。

#set($a=true)
#set($b=false)

#if($a && $b)
    This is all true.
#end

五、宏

Velocity 中的宏可以理解為函數定義。

(1)宏的定義:

#macro(宏的名稱 $參數1 $參數2 ...)
    語句體(即函數體)
#end

(2)宏的調用:

#宏的名稱($參數1 $參數2 ...)

注意:參數之間用空格隔開

(3)示例:

#macro(func $args1 $args2)
    This is a macro. The argument have ${args1} and ${args2}.
#end

#func("hello" "world")

輸出結果:
This is a macro. The argument have hello and world.

六、#parse 與 #include

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

示例:

foo.vm 文件:

#set($name="velocity")
$name

(1)parse.vm 文件:

#parse("foo.vm")

輸出結果:

velocity

(2)include.vm 文件

#include("foo.vm")

輸出結果:

#set($name="velocity") $name

 


免責聲明!

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



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