以前一直使用的jsp,後來看到有說使用模板會更好的說法,正比如較閒,就自學了一下velocity,把以前用jsp作視圖的spring mvc項目轉換爲了用velocity來作視圖,下面就一些使用中的問題作一下概括與總結,若有不對的地方,還望你們指出來。html
從使用velocity的角度來講,須要velocity的jar以及必需要的依賴,commons-lang、commons-collections,通常狀況下還會須要velocity-tools,而後就會產生一大堆的依賴,可是通過實際使用檢測,其實不添加那些依賴也不會有問題(或許是我沒有使用到那部分功能,其實加強包裏面的不少功能都不會用到的)。java
maven依賴配置:spring
<dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity</artifactId> <version>1.7</version> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.2</version> </dependency> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-tools</artifactId> <version>2.0</version> <exclusions> <exclusion> <artifactId>struts-core</artifactId> <groupId>org.apache.struts</groupId> </exclusion> <exclusion> <artifactId>struts-taglib</artifactId> <groupId>org.apache.struts</groupId> </exclusion> <exclusion> <artifactId>struts-tiles</artifactId> <groupId>org.apache.struts</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.9.2</version> </dependency> <dependency> <groupId>commons-digester</groupId> <artifactId>commons-digester</artifactId> <version>2.1</version> </dependency> <dependency> <groupId>commons-chain</groupId> <artifactId>commons-chain</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>commons-validator</groupId> <artifactId>commons-validator</artifactId> <version>1.4.1</version> </dependency> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency> <dependency> <groupId>oro</groupId> <artifactId>oro</artifactId> <version>2.0.8</version> </dependency> <dependency> <groupId>sslext</groupId> <artifactId>sslext</artifactId> <version>1.10-4</version> </dependency> <dependency> <groupId>xml-apis</groupId> <artifactId>xml-apis</artifactId> <version>1.4.01</version> </dependency>
最直接的方式就是${變量名},可是這種寫法在變量爲null的狀況會出問題,因此通常都使用$!{變量名}的方式進行;並且對於一個對象的某一個屬性的取值,使用$!{對象名.屬性名},這裏要求類符合javabean的規範(setter和getter方法),也等效於$!{對象名.getXxx()},這是調用get方法(可得調用其餘的可調用的方法均可以)。apache
比起jsp,velocity的代碼能夠直接地和html代碼寫在一塊兒,由於velocity引擎會進行處理,例如這裏的id屬性(貌似el表達式也支持這種寫法)。api
<input type="button" value='刪除' class="table_btn table_btn_delete table_delete" id="${ccbox.id}">
取值在前面實際已經提到了,使用${變量名}地方式就是取值,和循環地代碼合在一塊兒就是這樣的bash
#foreach($ccbox in ${ccboxList}) $!{ccbox.name} #end
使用「a in b」地形式,b是須要遍歷地集合,a是每次遍歷時的形式參數。mvc
和jsp裏面地jstl標籤不一樣的是,「結束「使用#end地方式表示,velocity地其餘須要「結束」地標籤也使用這個標記。dom
使用`$foreach.count`也能夠獲取當前循環次數(從1開始),使用`$foreach.index`獲得的序號是從0開始的,使用`$foreach.hasNext`更能夠獲取是不是最後一次循環,使用`$foreach.first`和`$foreach.last`能夠分別獲取開始和結束的元素。jsp
在循環體中使用`#break`可停止循環。maven
這是一個判斷字符串不爲空的時候進行輸出的語法
#if("$!{ccbox.company}" != "") $!{ccbox.company} #end
在判斷地條件表達式爲true的時候纔會執行被包裹的表達式。
這裏由兩個語法,
- `#parse`會將包含的文件中的內容看成相似源代碼來處理,文件內容會進行velocity模板方面的解析; - `#include`則會僅僅將文件內容看成普通文本進行處理,原封不動放進結果中
用法相似於
<div class="foot">#parse("foot.html")</div>
相似於函數,在velocity-tools中定義了不少,和spring mvc結合使用的時候spring也有提供一些(須要依賴velocity-tools支持),使用#name(參數)的形式進行使用,下面是使用spring的國際化功能
<span class="right">#springMessage("COMMON_system_name")</span>
spring的url路經計算功能(這樣寫獲得的結果是基於項目根路徑的)
<script src='#springUrl("/js/navi.js")'></script>
enjoy!!