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

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

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

    gdufo

     

    Struts2與Velocity模板

    Velocity是一種基于JAVA的模板引擎,開發人員使用簡單的模板語言就可以快速開發顯示層,它使得顯示層與程序代碼分離,在早期的Webwork版本中,所有UI標簽均使用Velocity模板引擎生成,可以在Struts-core-2.0.8.jar中找到template文件夾,其中的archive文件夾下存放著原有的vl文件!

    Struts2中查找vm文件的順序先查找Web應用程序,再查找類路徑。如果你需要使用vm作為顯示層,只需要在配置文件中指定resulttype屬性為velocity,然后將<param>location屬性指定到一個以vm結尾的資源上就可以了!

    1.Struts2中的Velocity中文亂碼的處理方式:

    因為在Velocity-1.4.jar中的org.apache.velocity.runtime.defaults中定義的velocity.properties中定義的input.encoding=ISO8859-1output.encoding=ISO8859-1,通常最好在VM文件中使用%{getText(‘’)}調用國際化資源文件的內容就不會產生亂碼。

    2.Velocityvm文件必須要經過Action才可以訪問,以便被程序解析,不可以直接訪問vm文件。

    3.vm文件中使用Struts2的標簽只需要在原有標簽前加#s就可以了,參數之間使用””分隔!

    (1.)例如下面是一個表單的定義:

    #sform(“action=Student” namespace=”/ilkj/student”)

           #stextfield(“label=%{getText(‘student.label.name’)}” “name=student.name”)

           #spassword(“label=%{getText(‘student.label.password’)} ” name=student.age”)

           #ssubmit(“value=getText(‘globale.label.submit’)”)

    #end

    (2.)下面是取出session中的一個參數的值

    #sproperty(“value=#session.information” “default=noValue”)

    (3.)下面是訪問Action中的屬性

    ${student.name},當然你也可以簡單寫成$student.name的形式。

    4.Velocity的內建變量:

    stack---ValueStack,可以使用${stack.findString(‘OGNL表達式’)}取值

    action---最近執行的Action,例如${action.getStudent().getName()}或者也可以直接寫${action.student.name}

    response---HttpServletRequest

    request---HttpServletResponse

    session---HttpSession

    application---ServletContext

    base---生成應用的上下文,相當與request.getContextPath()

    5.注釋語法

    (1.)單行注釋:##

    (2.)多行注釋:#* ... ... *#

    6.暫停執行

    #stop---停止執行后面的模板內容

    7.轉義字符

    Velocity使用 \ 轉義字符,例如email被定義為andrew830314@163.com#set($email=’andrew830314@163.com’)),你還想輸出$email而不被Velocity解析,那么你可以使用 \$email

    8.引入其他文件

    #include(“”),如果是JSP或者vm文件將會顯示內容,其他文本文件顯示文本,二進制會顯示亂碼,引入多個文件使用 , 間隔,#parse(“”)引入一個本地的vm文件,與#include(“”)不同,#parse(“”)只能引入一個文件,并且#parse(“”)可以訪問父模板里的變量。

    9.模板代碼復用

    #macro(代碼段名稱 $參數1 ... ...)

           ... ...

    #end

    只要使用#代碼段名稱($參數1 ... ...)就可以使用這段代碼,當然你也可以不使用任何參數

    10.判斷語句

    #if(邏輯表達式)

    注意:在Velocity中使用==判斷兩個變量是否相等,而不是使用equals(“”)方法。

    #else

    #end

    從上面我們還可以總結出,Velocity模板引擎使用#表示一種命令,例如#set是給某個變量設置值,使用$引用變量,使用()表示參數,使用{}表示作用范圍。

    另外需要注意的時候,Velocity只會按照gettXXX()解析變臉變量,例如student.name實際上找到的student.getName()方法,你可以試著在Action寫一個變量而不使用getXXX()方法,看看會不會在vm中取到值,答案是變量會被原樣輸出。

    Velocity使用的都是對象,即使你定義#set ($count=1)也會被包裝成Integer使用。

    另外,修改vm文件需要重新啟動服務器,如果在開發階段,我們可以設置struts.properties中的struts.devMode=true避免每次重新啟動服務器。

    最后我們思考一下,如果貨幣$2.95會被Velocity引擎直接輸出,還是去查找2.95這個變量?如果你在思考這個問題,說明你的JAVA基礎不過關哦!因為JAVA中的變量不能以數字開頭的哦!因此你不必擔心貨幣$2.95會被當作變量解析!另外,如果Velocity引擎未找到變量也會原樣輸出,例如${student.name}如果未找到會直接原樣輸出,這也是為什么我們直接訪問JSP的時候會看到大量的${}被原樣輸出。如果變量不存在,你想讓它不輸出,可以這樣寫$!{}

    posted on 2008-06-29 19:34 gdufo 閱讀(7394) 評論(1)  編輯  收藏 所屬分類: Struts2

    評論

    # re: Struts2與Velocity模板 2009-11-24 14:38 joken

    我有一個form,要用到struts2的form.
    #macro(dispModyForm $actionname $formname $validatebool $update)
    #sform("action=$actionname" "name=$formname" "validate=$validatebool")
    sssssssss
    #end
    #end

    這樣可以調用,但如果我只想對<form>定義模板,不想</form>也在模板里,如何定義?  回復  更多評論   

    導航

    統計

    常用鏈接

    留言簿(6)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    收藏夾

    Hibernate

    友情鏈接

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 91亚洲性爱在线视频| 在线观看91精品国产不卡免费| 亚洲国产一区视频| 中文字幕亚洲不卡在线亚瑟| 午夜亚洲国产理论片二级港台二级 | 亚洲欧洲自拍拍偷综合| 亚洲色精品三区二区一区| 7723日本高清完整版免费| 亚洲国产成人久久77| 美女网站免费福利视频| 亚洲一区在线视频| 国产成人A在线观看视频免费| www.亚洲色图.com| 久久精品国产亚洲AV忘忧草18| 91成人免费在线视频| 亚洲av无一区二区三区| 亚洲精品无码久久毛片| eeuss免费影院| 亚洲大尺度无码专区尤物| 最近免费mv在线电影| 久久久久国产亚洲AV麻豆| 久草免费福利在线| 日产亚洲一区二区三区| 国产一卡2卡3卡4卡2021免费观看| 国产精品亚洲片在线va| 免费人成视频在线观看不卡| 日韩a级无码免费视频| 亚洲狠狠狠一区二区三区| 日韩在线免费电影| 国产精品美女免费视频观看| 亚洲国语精品自产拍在线观看| 国产成在线观看免费视频| 无码专区—VA亚洲V天堂| 未满十八私人高清免费影院| 国产无遮挡裸体免费视频 | 在线观看成人免费视频| 免费无码又爽又黄又刺激网站| 精品国产亚洲一区二区三区| 91九色老熟女免费资源站| 在线观看亚洲专区| 国产一区二区三区在线免费|