velocity基礎語法(部分)

velocity是一個java的頁面模板框架,Apache基金會出品,自從2010年出了1.7版本以後,就沒有出新版本了,svn裏面有一個2.0的分支,可是下載下來根本沒有辦法編譯過,會有各類奇怪的maven依賴問題,據傳已經把人調過去開發freemarker了。java

其餘的不說了,不更新,想好一點就是足夠穩定了,不須要更新了。app

下面是我在自學的時候整理的部分語法,貼在這裏,你們來指正一下。:)框架

##關鍵字maven

全部的關鍵字都是以 # 開頭的,而全部的變量則是以 $ 開頭svn

##變量函數

定義變量使用#set( $iAm = "good!" ),而#set( $hhh = "good! $iAm" )則會讀取 $ 對應的變量的值,將值填充到對應的位置code

在找不到對應的變量的時候會將其當成普通字符串進行處理對象

當時用單引號將 $xxx 引發來的時候不會對其進行變量替換ci

在使用變量的時候可使用$name${name}的形式,可是對於同時定義了name和names的狀況,$names就沒辦法正確識別了, 就只能用${names}的形式。 對於複雜的對象類型變量,使用${person.name}能夠訪問獲得name屬性的值,其實這是經過對get方法的訪問獲得的, 也就是${person.name}等同於${person.getName()}element

###變量賦值

變量是弱類型的,能夠有以下的賦值操做:

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

須要注意,在使用#set($foo = $bar)以後,這兩個變量就指向了同一個對象了,對一個變量的對象進行操做,會影響到另一個變量

##循環

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

循環過程當中會將當前對象賦值給element,這個變量名能夠修改,對應好便可, 循環過程當中的當前序號保存在velocityCount變量中,須要注意,序號從1開始每次加1

使用$foreach.count也能夠獲取當前循環次數(從1開始),使用$foreach.index獲得的序號是從0開始的, 使用$foreach.hasNext更能夠獲取是不是最後一次循環, 使用$foreach.first$foreach.last能夠分別獲取開始和結束的元素

在循環體中使用#break可停止循環

###遍歷List和Map

遍歷Map

#foreach($param in ${paramValues.keySet()})
    <tr>
        <th>$param</th>
        <td>${paramValues.get($param)}</td>
    </tr>
#end

遍歷List

#foreach($sal in ${salerList})
    $sal.name
#end

##條件判斷

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

表達式使用boolean類型的結果便可,velocity提供的關係操做符有與、或、非,對應的符號是&&||

$foo && $bar

##宏定義

宏相似於函數,定義和調用的語法:

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

各個參數之間使用空格隔開,不是逗號

#macro(sayHello $name)
hello $name
#end
#sayHello("velocity")

##包含指令

包含指令可使用 #parse 和 #include 來實現,二者的區別是,

  • #parse會將包含的文件中的內容看成相似源代碼來處理,文件內容會進行velocity模板方面的解析;
  • #include則會僅僅將文件內容看成普通文本進行處理,原封不動放進結果中

對於文件foo.vm:

#set($name ="velocity")

那麼#parse和#include的用法分別是:

#parse("foo.vm")
$name
#include("foo.vm")

結果是

velocity
#set($name ="velocity")

include當包含的參數有多個時,使用逗號分隔開;parse時能接受一個參數;全部被包含的文件都只能在模板文件的根目錄

##註釋

註釋使用3種形式

1 ## 這是註釋
2 #*

  跨行註釋

  *#
3 #**

  這是帶有doc功能的註釋

  *#

##停止

使用#break或者#stop能夠停止執行

##字面值

使用#literal()#end包裹的代碼不會進行處理,直接輸出字面值

#literal()

#foreach ($woogie in $boogie)

nothing will happen to $woogie

#end

#end

會直接輸出

#foreach ($woogie in $boogie)

nothing will happen to $woogie

#end
相關文章
相關標籤/搜索