模板引擎 Velocity

Velocity簡介html

Velocity是一個基於java的模板引擎(template engine)。它容許任何人僅僅簡單的使用模板語言(template language)來引用由java代碼定義的對象。 前端

當Velocity應用於web開發時,界面設計人員能夠和java程序開發人員同步開發一個遵循MVC架構的web站點,也就是說,頁面設計人員能夠只關注頁面的顯示效果,而由java程序開發人員關注業務邏輯編碼。Velocity將java代碼從web頁面中分離出來,這樣爲web站點的長期維護提供了便利,同時也爲咱們在JSP和PHP以外又提供了一種可選的方案。 java

Velocity的能力遠不止web站點開發這個領域,例如,它能夠從模板(template)產生SQL和PostScript、XML,它也能夠被當 做一個獨立工具來產生源代碼和報告,或者做爲其餘系統的集成組件使用。Velocity也能夠爲Turbine web開發架構提供模板服務(template service)。Velocity+Turbine提供一個模板服務的方式容許一個web應用以一個真正的MVC模型進行開發。web

Velocity的Eclipse插件的Update地址是:http://propsorter.sourceforge.net/veloeclipseapi

Velocity 的 JavaDoc: http://www.ostools.net/apidocs/apidoc?api=velocity-1.7數組

 

使用模板庫最大的不一樣是能夠脫離 servlet 容器,運行和測試的時候沒必要在 servlet 容器下!架構

這是和JSP最大的不一樣之處。eclipse

我的感受和freemaker相似:http://freemarker.org/函數

Figure
 

Velocity的一些用法工具

1.截取部分字段substring

1 原始字符串:$!ag.tagValue,也許很長,前端頁面展現時須要截取字符串。
2 #set($str=$!ag.tagValue)
3 
4 #if($str.length()>30)
5     #set($str=$str.substring(0,30))
6     $str ...
7 #else
8     $!ag.tagValue
9 #end

使用substring(begin,end)要注意,結束位置爲:end索引-1

2.分割成數組split

1 #if($!{result.creType} && $result.creType)
 2   #foreach ($element in $result.creType.split(","))
 3     #if($element == 1)
 4        <script>document.getElementsByName("cretype")[0].checked="checked";</script>
 5     #elseif($element == 2)
 6        <script>document.getElementsByName("cretype")[1].checked="checked";</script>
 7     #else
 8        <script>document.getElementsByName("cretype")[2].checked="checked";</script>              
 9     #end
10   #end
11 #end

3.說到split成數組,就要看數組的幾個能夠用的方法

velocity 中的數組對應 Java 中的 List 對象。對於 Java 原生 Array 對象, 只可以 #foreach 進行遍歷,沒法使用 $arr[0] 和 $arr.get(0) 方法。

4.因此學java從不用數組,而用list

--事實上,list很方便,但list比數組效率低不少倍

  • $myarray.isEmpty()list是否爲空
  • $myarray.size()獲取list元素個數
  • $myarray.get(2)獲取list指定下標的元素
  • $myarray.add()增長元素

5.計數用$velocityCount

在foreach中velocityCount表示循環的次數,從1開始,表明第一個循環。

6.空null和空字符串""的判斷

在velocity中,非null被認爲是真的,因此,判斷null能夠用

1 #if($!變量名)
2  ……
3 #else
4  ……
5 #end

或者既能夠判斷null也能夠判斷空字符串

1 #if("$!varName" != "")
2  不爲null 或 ""
3 #else
4  ……
5 #end

7.基本語法錯誤#end不要忘

最開始的時候常常#if就完了報錯,後來都是寫完if就end,最後寫中間。

8.#macro其實也很簡單

原來感受不懂不敢碰,自從寫了個velocity分頁後就突然以爲宏不要太好用。事情是這樣的,當時地區三級聯動須要多處調用,提取出成公共模塊,用#parse導入後出現衝突,由於一個頁面用兩次地區聯動代碼,id就重複了。因而想把id給變成參數,當我須要這個公用代碼的時候,把id當參數傳進去,最後render的結果就是html代碼的id爲個人參數。這樣看來,宏就是一個函數。

想要用宏,先寫好,而後parse,而後調用。

一個簡單的宏函數:

1 #macro( d )
2 <tr><td></td></tr>
3 #end

使用它:若是在本頁面,直接#d,若是是單獨寫了一個模板文件,那麼須要先#parse(文件路徑),再#d,如同js外部引用。

傳參數的宏:

1 #macro( tablerows $color $somelist )
2 #foreach( $something in $somelist )
3 <tr><td bgcolor=$color>$something</td></tr>
4 #end
5 #end

一個綜合使用,分頁

9.引用外部文件#include和#parse

我開始常常用#include,後來發現刷新頁面沒變化,用#parse就行了。字面理解,一個是直接拿過來,一個是解析後。因此,若是是傳html代碼,能夠直接include;如果包含velocity代碼的要編譯#parse.

相關文章
相關標籤/搜索