閑人野居
          好好學習,天天向上
          posts - 57,  comments - 137,  trackbacks - 0
              一個古老而又強大的模版引擎。在模版引擎中,velocity中,應該屬于最常用的,不管是在maven的項目模版,還是在源代碼輸出,甚至直接網(wǎng)頁輸出中,都可以看到其身影。當然,最近的freemarker大有平分天下之意。
             以前的時候,曾用velocity設(shè)計過一個自動代碼的項目,在用的過程中,享受了其簡單而又靈活的功能。后來由于,自動代碼的項目一直沒有什么進展,也就很少去關(guān)注velocity。這段時間,被jsf搞得焦頭爛額,最后想起了velocity,看看能不能用其來實現(xiàn)替換jsf的標記庫功能。于是又復習了一遍velocity。
             先來看看velocity的語法:vtl也就是velocity的基本語言.用過腳本語言的,對于這個應該會很容易上手,其實,基本上,語法可以分為變量和關(guān)鍵詞。先來看看變量,變量使用$作為開頭符號,$a 和${a}是一致的。類似于jstl中的變量定義。在模版中聲明一個變量是很容易的,使用set關(guān)鍵字
             #set( $foo = "Velocity" )。對于velocity中,感覺比較靈活的就是變量中,可以直接使用方法,和javabean屬性一樣方便使用:
             對于javabean 支持內(nèi)置屬性,如下:$customer.Address,$purchase.Total,$customer.Address.phone。不過好像不支持map語法,如:
          a["key"]這種寫法。但是可以使用方法代替:a.get("key")。而使用了方法,感覺就在使用java代碼一樣方便。當然變量中支持簡單的表達式計算:$a+1等等
             有一點需要注意的是,如果變量沒有解析,還是會輸出$a這個變量,而不是空白,或者報錯,這一點,不知道是方便還是不方便。
             語法中另外一個,就是關(guān)鍵字了,關(guān)鍵字使用#開頭。
             其關(guān)鍵字也不多,只有少數(shù)的幾個,但是已經(jīng)足夠用了。如前面的聲明變量:#set
             #if #elseif #else  #end 這是最常用的條件判斷,每個判斷使用#end結(jié)尾
             #if($a==1)true enough#{else}no way!#end

             #foreach() #end用于循環(huán)輸出
             #foreach( $key in $allProducts.keySet() )
              <li>Key: $key -> Value: $allProducts.get($key)</li>
             #end
            
             #include,用于包括一些資源文件,當然include是不會去解析資源文件,這和#parse不同
             #include( "one.txt" )

             #parse,用于解析并且包括相應的資源文件
             #parse( "me.vm" ),和主文件共享相應的Context
            
             #stop,用于停止執(zhí)行解析,并返回,主要用于調(diào)試功能。

             基本上,使用以上的語法,可以定義出任何的模版了。當然,為了簡化模版的定義,velocity特意推出了#macro這個強大的功能.
             #macro,類似于宏定義,用于自定義相應的標記。
             如下定義了一段宏,用于輸出表格中的列表
             #macro( tablerows $color $somelist )
              #foreach( $something in $somelist )
                  <tr><td bgcolor=$color>$something</td></tr>
              #end
             #end
            
             在模版中,只需要使用#tablerows($color $somelist)就可以取代里面的代碼了:
             #set( $greatlakes = ["Superior","Michigan","Huron","Erie","Ontario"] )
             #set( $color = "blue" )
            <table>
               #tablerows( $color $greatlakes )
            </table>
           
             而且#macro 支持內(nèi)嵌語法,所以對于模版的定義,就變得更加的靈活而簡單了。
            


          posted on 2007-05-14 08:30 布衣郎 閱讀(5007) 評論(4)  編輯  收藏 所屬分類: web view技術(shù)

          FeedBack:
          # re: 關(guān)于velocity 一語法篇
          2007-05-14 08:50 | Welkin Hu
          這些東東和XSLT相比,有些什么優(yōu)勢呢?  回復  更多評論
            
          # re: 關(guān)于velocity 一語法篇
          2007-05-14 10:34 | 布衣郎
          @Welkin Hu
          xslt需要xml支持,而vm不需要  回復  更多評論
            
          # re: 關(guān)于velocity 一語法篇
          2007-08-26 22:05 | upgrades
          jsf和velocity能否一起工作?我很想知道這個問題!  回復  更多評論
            
          # re: 關(guān)于velocity 一語法篇
          2007-12-06 17:04 | winhkey
          有一點需要注意的是,如果變量沒有解析,還是會輸出$a這個變量,而不是空白,或者報錯,這一點,不知道是方便還是不方便。


          盡量規(guī)范點用${a}代替$a,要防止你說的情況就用$!{a},有數(shù)據(jù)就出數(shù)據(jù),沒數(shù)據(jù)就是空白  回復  更多評論
            

          <2007年5月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(12)

          隨筆分類(59)

          隨筆檔案(57)

          blog

          java

          uml

          搜索

          •  

          積分與排名

          • 積分 - 357711
          • 排名 - 155

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 溆浦县| 尚义县| 威远县| 蓝山县| 东乡| 调兵山市| 肥西县| 安阳市| 保德县| 迁安市| 阜平县| 中牟县| 正安县| 平昌县| 子长县| 天镇县| 弋阳县| 三门峡市| 治县。| 綦江县| 梓潼县| 井冈山市| 嵊泗县| 庆安县| 黑河市| 江安县| 宜城市| 库尔勒市| 阿合奇县| 休宁县| 嵩明县| 乐亭县| 原阳县| 万山特区| 全南县| 蒙山县| 工布江达县| 仁化县| 阿拉善左旗| 西昌市| 得荣县|