Velocity是一個基於java的模板引擎(template engine)。它容許任何人僅僅簡單的使用模板語言(template language)來引用由java代碼定義的對象。 html
當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架構
|
一、"#"用來標識Velocity的腳本語句,包括#set、#if 、#else、#end、#foreach、#end、#iinclude、#parse、#macro等; 如: #if($info.imgs) <img src="$info.imgs" border=0> #else <img src="noPhoto.jpg"> #end
二、"$"用來標識一個對象(或理解爲變量);如 如:$i、$msg、$TagUtil.options(...)等。
三、"{}"用來明確標識Velocity變量; 好比在頁面中,頁面中有一個$someonename,此時,Velocity將把someonename做爲變量名,若咱們程序是想在someone這 個變量的後面緊接着顯示name字符,則上面的標籤應該改爲${someone}name。
四、"!"用來強制把不存在的變量顯示爲空白。 如當頁面中包含$msg,若是msg對象有值,將顯示msg的值,若是不存在msg對象同,則在頁面中將顯示$msg字符。這是咱們不但願的,爲了把不存 在的變量或變量值爲null的對象顯示爲空白,則只須要在變量名前加一個「!」號便可。 如:$!msg函數 |
|
|
理論上你能夠在EasyjWeb模板使用全部Velocity的腳本及功能,但咱們不推薦你在界面模板中使用過多過複雜的腳本表達方式,在萬不得已的狀況下,不要在界面模板中加入任何複雜的邏輯,更不要在界面模板中加入變量聲明、邏輯運算符等等。工具 在EasyJWeb中,咱們提供了五條基本的模板腳本語句,基本上就能知足全部應用模板的要求。這四條模板語句很簡單,能夠直接由界面設計人員來添加。在當前不少EasyJWeb的應用實踐中,咱們看到,全部界面模板中概括起來只有下面四種簡單模板腳本語句便可實現: 一、$!obj 直接返回對象結果。 如:在html標籤中顯示java對象msg的值。<p>$!msg</p> 在html標籤中顯示通過HtmlUtil對象處理事後的msg對象的值 <p>$!HtmlUtil.doSomething($!msg)</p>oop 二、#if($!obj) #else #end 判斷語句 如:在EasyJWeb各類開源應用中,咱們常常看到的用於彈出提示信息msg的例子。 #if($msg) <script> alert('$!msg'); </script> #end 上面的腳本表示當對象msg對象存在時,輸出<script>等後面的內容。測試 三、#foreach( $info in $list) $info.someList #end 循環讀取集合list中的對象,並做相應的處理。 如:EasyJF開源論壇系統中論(0.3)壇首頁顯示熱門主題的html界面模板腳本: #foreach( $info in $hotList1) <a href="/bbsdoc.ejf?easyJWebCommand=show&&cid=$!info.cid" target="_blank">$!info.title</a><br> #end 上面的腳本表示循環遍歷hotList1集合中的對象,並輸出對象的相關內容。
四、#macro(macroName)#end 腳本函數(宏)調用,不推薦在界面模板中大量使用。 如:在使用EasyJWeb Tools快速生成的添刪改查示例中,能夠點擊列表的標題欄進行升降排序顯示,這是咱們在EasyJWeb應用中常常看到的一個排序狀態顯示的模板內容。 函數(宏)定義,通常放在最前面 #macro(orderPic $type) #if ($orderField.equals($type)) <img src="http://images.cnblogs.com/ico/${orderType}.gif"> #end #end 具體的調用如:<font color="#FFFFFF">頭銜#orderPic("title")</font> 通過測試,宏不支持方法重載 五、包含文件#inclue("模板文件名")或#parse("模板文件名") 主要用於處理具備相同內容的頁面,好比每一個網站的頂部或尾部內容。 使用方法,能夠參考EasyJF開源Blog及EasyJF開源論壇中的應用! 如:#parse("/blog/top.html")或#include("/blog/top.html") parse與include的區別在於,若包含的文件中有Velocity腳本標籤,將會進一步解析,而include將原樣顯示。 |
|
|
|
在萬不得已的時候,不要在頁面視圖本身聲明Velocity腳本變量,也就是儘可能少使用#set。有時候咱們須要在頁面中顯示序號,而程序對象中又沒有包 含這個序號屬性同,能夠本身定義。如在一個循環體系中,以下所示: #set ($i=0) #foreach($info in $list) 序號:$i #set($i=$i+1) #end
|
|
|
|
一、聲明:#set ($var=XXX) 左邊能夠是如下的內容 Variable reference String literal Property reference Method reference Number literal #set ($i=1) ArrayList #set ($arr=["yt1","t2"]) 算術運算符
二、註釋: 單行## XXX 多行#* xxx xxxx xxxxxxxxxxxx*#
References 引用的類型 三、變量 Variables 以 "$" 開頭,第一個字符必須爲字母。character followed by a VTL Identifier. (a .. z or A .. Z). 變量能夠包含的字符有如下內容: alphabetic (a .. z, A .. Z) numeric (0 .. 9) hyphen ("-") underscore ("_")
四、Properties $Identifier.Identifier $user.name hashtable user中的的name值.相似:user.get("name")
五、Methods object user.getName() = $user.getName()
六、Formal Reference Notation 用{}把變量名跟字符串分開
如 #set ($user="csy"} ${user}name 返回csyname
$username $!username $與$!的區別 當找不到username的時候,$username返回字符串"$username",而$!username返回空字符串""
七、雙引號 與 引號 #set ($var="helo") test"$var" 返回testhello test'$var' 返回test'$var' 能夠經過設置 stringliterals.interpolate=false改變默認處理方式
八、條件語句 #if( $foo ) <strong>Velocity!</strong> #end #if($foo) #elseif() #else #end 當$foo爲null或爲Boolean對象的false值執行.
九、邏輯運算符:== && || !
十、循環語句#foreach($var in $arrays ) // 集合包含下面三種Vector, a Hashtable or an Array #end #foreach( $product in $allProducts ) <li>$product</li> #end
#foreach( $key in $allProducts.keySet() ) <li>Key: $key -> Value: $allProducts.get($key)</li> #end
#foreach( $customer in $customerList ) <tr><td>$velocityCount</td><td>$customer.Name</td></tr> #end
十一、velocityCount變量在配置文件中定義 # Default name of the loop counter # variable reference. directive.foreach.counter.name = velocityCount # Default starting value of the loop # counter variable reference. directive.foreach.counter.initial.value = 1
十二、包含文件 #include( "one.gif","two.txt","three.htm" )
1三、Parse導入腳本 #parse("me.vm" )
1四、#stop 中止執行並返回
1五、定義宏Velocimacros ,至關於函數 支持包含功能 #macro( d ) <tr><td></td></tr> #end 調用 #d()
1六、帶參數的宏 #macro( tablerows $color $somelist ) #foreach( $something in $somelist ) <tr><td bgcolor=$color>$something</td></tr> #end #end
1七、Range Operator #foreach( $foo in [1..5] |
|