velocity模板庫的實際使用

        以前一直使用的jsp,後來看到有說使用模板會更好的說法,正比如較閒,就自學了一下velocity,把以前用jsp作視圖的spring mvc項目轉換爲了用velocity來作視圖,下面就一些使用中的問題作一下概括與總結,若有不對的地方,還望你們指出來。html

0、環境準備

         從使用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!!

相關文章
相關標籤/搜索