日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

velocity模板的语法简要汇总

發布時間:2023/12/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 velocity模板的语法简要汇总 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

velocity模板的語法簡要匯總

What’s velocity

Velocity是一個基于java的模板引擎(template engine)。它允許任何人僅僅簡單的使用模板語言(template language)來引用由java代碼定義的對象。

符號

  • “#”用來標識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、msgTagUtil.options(…)等。

  • “{}”用來明確標識Velocity變量;
    比如在頁面中,頁面中有一個someonenameVelocitysomeonenamesomeonename{someone}name。

  • “!”用來強制把不存在的變量顯示為空白。
    如當頁面中包含msgmsgmsgmsgmsg字符。這是我們不希望的,為了把不存 在的變量或變量值為null的對象顯示為空白,則只需要在變量名前加一個“!”號即可。
    如:$!msg

  • 變量定義

    #set($maxValue=5) #set($name="Bob") #set($arrayName=["element1","element2",...])

    注釋

    ## This is a single line comment. #* Thus begins a multi-line comment. Online visitors won't see this text because the Velocity Templating Engine will ignore it. *#

    還有一個文檔注釋

    (3)文檔格式:#**This is a VTL comment block andmay be used to store such informationas the document author and versioninginformation:@version 1.1@author xiao*#

    靜態引用輸出

    Velocity 遇到一個不能處理的引用時,一般他會直接輸出這個引用email,email,如下例,我們可以在$后面加上一個!號,那么就會輸出空白:

    <input type="text" name="email" value="$email"/> <input type="text" name="email" value="$!email"/>

    關系和邏輯操作符

    Velocity 也具有邏輯AND, OR 和 NOT 操作符。

    ## example for AND #if($foo && $bar)<strong> This AND that</strong> #end

    例子中#if()指令僅在$foo和$bar斗為真的時候才為真。如果$foo為假,則表達式也為假;并且 $bar將不被求值。如果 $foo 為真,Velocity 模板引擎將繼續檢查$bar的值,如果 $bar 為真,則整個表達式為真。并且輸出This AND that 。如果 $bar為假,將沒有輸出因為整個表達式為假。

    轉義字符

    如果email 己定義了(比如它的值是foo),而這里你卻想輸出$email. 這樣一個字符串,就需要使用轉義字符”\”.

    ## The following line defines $email in this template: #set( $email = "foo" ) $email \$email \\$email \\\$email

    上面的模板在web 頁面上的輸出將是:

    foo $email \foo \$email

    關于null

    但注意:如果右邊的操作數是一個屬性或命令的引用而返回null,那么賦值將不會成功,且在隨后也不能再取出使用. 如下例:

    #set( $result = $query.criteria("name")) The result of the first query is $result #set( $result = $query.criteria("address")) The result of the second query is $result

    如果query.criteria("name")"bill",query.criteria(“address”) 返回null,上面的輸出結果將是:

    The result of the first query is bill The result of the second query is bill

    又如下例:

    #set( $criteria = ["name", "address"] ) #foreach($criterion in $criteria )#set($result=$query.criteria($criterion) )#if($result)Query was successful #end

    在上例中,就不能依賴if($result)來決定查詢是否成功. #set右邊如果是null會 它將不能被賦其它值.一個解決辦法是,每次都將$result設為false:

    #set( $criteria = ["name", "address"] ) #foreach($criterion in $criteria )#set($result = false)#set($result=$query.criteria($criterion) )#if($result)Query was successful #end

    條件判斷

    #if($foo<10)<strong>Go North</strong> #elseif($foo==10)<strong>Go East</strong> #elseif($bar==6)<strong>Go South</strong> #else<strong>Go West</strong> #end

    循環和計數

    通過引用變量$velocityCount可以訪問到Velocity 提供的計數器:

    <table> #foreach( $customer in $customerList )<tr><td>$velocityCount</td><td>$customer.Name</td></tr> #end </table>

    $velocityCount是默認的計數器引用,你可以在配置velocity.properties 中改成你喜歡的:

    include

    include腳本元素讓模板設計者可以在模板中引入一個本地文件, 這個被引入的文件將不會經過Velocity 的解析. 安全起見,可以引放的文件只是是配置參數TEMPLATE_ROOT所定義目錄下的,默認為當前目錄下.

    #include( "one.txt" )

    多個文件或者用變量名代替:

    #include( "greetings.txt", $seasonalstock )

    parse

    parse元素指示可以引入一個包含TVL 的本地文件,這個文件將被Veloict engine 解析輸出。

    #parse( "me.vm" )

    與#include 指令不同, #parse 可以從引入的模板中得到變量引用.但#parse 指令只能接受一個參數.

    VTL templates 被#parse 的模板中還可以再包含#parse 聲明,默認的深度為10,這是由配置參數directive.parse.max.depth 在文件velocity.properties 中決定的,你可以修改它以適合項目要求

    stop

    stop指令用來指示在模板的某處,engine 停止解析,這一般用來調用。用法很簡單.

    #stop

    宏調用

    macro指令讓模板設計者可以將些重復、相關的的腳本版斷定義為一個功能塊.

    #macro( tablerows $color $somelist )#foreach( $something in $somelist )<tr><td bgcolor=$color>$something</td></tr>#end #end

    然后,我們在頁面中來使用:

    #set( $greatlakes = ["Superior","Michigan","Huron","Erie","Ontario"] ) #set( $color = "blue" ) <table>#tablerows( $color $greatlakes ) </table>

    輸出結果:

    <table><tr><td bgcolor="blue">Superior</td></tr><tr><td bgcolor="blue">Michigan</td></tr><tr><td bgcolor="blue">Huron</td></tr><tr><td bgcolor="blue">Erie</td></tr><tr><td bgcolor="blue">Ontario</td></tr> </table>

    如果將宏#tablerows($color $list)定義到一個模板庫中(Velocimacros template library), 其它模板就都可以訪問它了.

    盡量不要直接在模板中使用#parse() 包含#macro() 指令.因為#parse() 動作在運行時執行,時會有一個在VM 中查找元素的過程.

    內置對象

    Velocity內置了一些對象,在vm模版里可以直接調用,列舉如下:
    $request、$response、$session,另外,模板內還可以使用 $msg內的消息工具訪問 Struts 的國際化資源,達到簡便實現國際化的方法。

    數組訪問

    對數組的訪問在Velocity中存在問題,因為Velocity只能訪問對象的方法,而數組又是一個特殊的Array,所以雖然數組可以進行循環列舉,但卻不能定位訪問特定位置的元素,如 strs[2],數組對固定位置元素的訪問調用了Array的反射方法get(Object array, int index),而Velocity沒能提供這樣的訪問,所以數組要么改成List等其他類容器的方式來包裝,要么就通過公用Util類的方式來提供,傳入數組對象和要訪問的位置參數,從而達到返回所需值的目的。

    總結

    以上是生活随笔為你收集整理的velocity模板的语法简要汇总的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。