<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

       #foreach() #end用于循環輸出
       #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,用于停止執行解析,并返回,主要用于調試功能。

       基本上,使用以上的語法,可以定義出任何的模版了。當然,為了簡化模版的定義,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 支持內嵌語法,所以對于模版的定義,就變得更加的靈活而簡單了。
      


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

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


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

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

    常用鏈接

    留言簿(12)

    隨筆分類(59)

    隨筆檔案(57)

    blog

    java

    uml

    搜索

    •  

    積分與排名

    • 積分 - 357203
    • 排名 - 155

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲AV无码一区二区乱子仑| 亚洲综合激情五月色一区| 免费无码专区毛片高潮喷水| 最近最新中文字幕完整版免费高清| 亚洲AV电影院在线观看| 日韩免费在线观看视频| 中文字幕亚洲综合精品一区| 日韩中文字幕免费视频| 亚洲阿v天堂在线| 99久久综合精品免费| 亚洲高清中文字幕| 午夜福利不卡片在线播放免费| 亚洲成AV人片久久| 成人最新午夜免费视频| 亚洲AV日韩AV一区二区三曲| 亚洲?V无码成人精品区日韩| 无码免费又爽又高潮喷水的视频| 亚洲午夜无码AV毛片久久| 国产在线精品免费aaa片| 亚洲欧洲国产经精品香蕉网| 野花高清在线电影观看免费视频| 亚洲色最新高清av网站| 免费人成在线观看网站品爱网日本| 一区二区三区在线免费| 亚洲AV成人精品网站在线播放| 亚洲精品免费在线观看| 学生妹亚洲一区二区| 免费永久在线观看黄网站| 四虎影视无码永久免费| 亚洲日产2021三区在线 | mm1313亚洲精品国产| 91成人免费福利网站在线| 亚洲综合一区二区国产精品| 欧洲黑大粗无码免费| 永久免费观看黄网站| 99ri精品国产亚洲| 亚洲Aⅴ无码一区二区二三区软件 亚洲AⅤ视频一区二区三区 | 亚洲爆乳精品无码一区二区| 亚洲精品亚洲人成在线观看下载| 久久aa毛片免费播放嗯啊| 欧美亚洲国产SUV|