Junky's IT Notebook

          統(tǒng)計(jì)

          留言簿(8)

          積分與排名

          WebSphere Studio

          閱讀排行榜

          評(píng)論排行榜

          WebWork2教程(中文版)(4.2)

          4.2、在WebWork中使用Velocity

          使用Velocity作為視圖,有兩種方法:

          l         使用velocity結(jié)果類型來呈現(xiàn)Velocity模板

          l         web.xml中注冊WebWorkVelocityServlet,直接請求Velocity模板文件來呈現(xiàn);這種方法要在web.xml中為WebWorkVelocityServlet添加一個(gè)Servlet映射,如下:

          <servlet> 
                 <servlet-name>velocity</servlet-name> 
                 <servlet-class>com.opensymphony.webwork.views.velocity.WebWorkVelocityServlet</servlet-class> 
                 <load-on-startup>1</load-on-startup> 
          </servlet> 
          <servlet-mapping> 
                 <servlet-name>velocity</servlet-name> 
                 <url-pattern>*.vm</url-pattern> 
          </servlet-mapping>

          使用velocity結(jié)果類型意味著Velocity模板是通過Action來呈現(xiàn)。如果訪問.vm文件,不會(huì)呈現(xiàn)該文件,而是返回文本文件。因此,Velocity模板文件應(yīng)該放在WEB-INF目錄下,使其無法直接訪問。

          使用WebWorkVelocityServlet意味著可以通過請求.vm文件來呈現(xiàn)Velocity模板,這可能需要在模板中實(shí)現(xiàn)安全檢查。

          無論使用哪種方法,在寫模板時(shí),Velocity的所有特性都是有效的,并且有一些WebWork的特定功能可以使用。這里假設(shè)你對Velocity很熟悉,重點(diǎn)放在WebWork的特定功能上。

          1WebWork的特定功能

          WebWorkValue Stack中提供了一些可以訪問的對象,包括:

          l         當(dāng)前的HttpServletRequest

          l         當(dāng)前的HttpServletResponse

          l         當(dāng)前的OgnlValueStack

          l         OgnlTool實(shí)例

          l         當(dāng)前Action類的所有屬性

          要訪問Value Stack中的對象,需要在模板中正確使用Velocity引用:

          l         $req=HttpServletRequest

          l         $res=HttpServletResponse

          l         $stack=OgnlValueStack

          l         $ognl=OgnlTool

          l         $name-of-property=當(dāng)前Action類的屬性

          2)使用velocity結(jié)果類型

          下面的例子是使用Velocity模板作為結(jié)果,來實(shí)現(xiàn)前面的Hello例子,注意<property value="person" />標(biāo)記被$person引用所替代:

          xwork.xml

          <!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" 
          "http://www.opensymphony.com/xwork/xwork-1.0.dtd">
          <xwork>
                 <!-- Include webwork defaults (from WebWork-2.1 JAR). -->
                 <include file="webwork-default.xml" />
                 <!-- Configuration for the default package. -->
                 <package name="default" extends="webwork-default">
                        <!-- Default interceptor stack. --> 
                        <default-interceptor-ref name="defaultStack" /> 
                        <!-- Action: Lesson 4.2: HelloAction using Velocity as result. -->
                        <action name="helloVelocity" class="lesson03.HelloAction">
                          <result name="error" type="dispatcher">ex01-index.jsp</result>
                          <result name="success" type="velocity">ex01-success.vm</result>
                        </action>
                 </package>
          </xwork>

          HelloAction.java:(同前面的例子)

          ex01-index.jsp:(同前面的例子)

          ex01-success.vm

          <html> 
          <head> 
          <title>WebWork Tutorial - Lesson 4.2 - Example 1</title> 
          </head> 
          <body> 
          Hello, $person 
          </body> 
          </html>

          3)在Velocity中使用WebWork標(biāo)記

          使用Velocity模板替代JSP標(biāo)記,會(huì)失去使用JSP標(biāo)記的能力。然而,WebWorkVelocity Servlet提供了一種在Velocity模板中使用JSP標(biāo)記的方法:使用#tag#bodytag#param Velocimacros。下面是通用語法:

          #tag (name-of-tag list-of-attributes)

          或:

          #bodytag (name-of-tag list-of-attributes)
                 #param (key value)
                 #param (key value)
          ...
          #end

          下面的例子使用Velocity實(shí)現(xiàn)4.1.1節(jié)中示范UI標(biāo)記用法的例子:

          xwork.xml

          <!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" 
          "http://www.opensymphony.com/xwork/xwork-1.0.dtd">
          <xwork>
                 <!-- Include webwork defaults (from WebWork-2.1 JAR). -->
                 <include file="webwork-default.xml" />
                 <!-- Configuration for the default package. -->
                 <package name="default" extends="webwork-default">
                        <!-- Default interceptor stack. --> 
                        <default-interceptor-ref name="defaultStack" /> 
                        <!-- Actions: Lesson 4.2: FormProcessingAction using Velocity. --> 
                        <action name="formProcessingVelocityIndex" class="lesson04_02.FormProcessingIndexAction">
                          <result name="success" type="velocity">ex02-index.vm</result>
                        </action>
                        <action name="formProcessingVelocity" class="lesson04_01_01.FormProcessingAction"> 
                          <result name="input" type="velocity">ex02-index.vm</result> 
                          <result name="success" type="velocity">ex02-success.vm</result> 
                          <interceptor-ref name="validationWorkflowStack" /> 
                        </action> 
                 </package>
          </xwork>

          ex02-index.vm

          <html> 
          <head> 
          <title>WebWork Tutorial - Lesson 4.2 - Example 2</title> 
          <style type="text/css"> 
            .errorMessage { color: red; } 
          </style>   
          </head> 
          <body> 
          <p>UI Form Tags Example using Velocity:</p> 
          #bodytag (Form "action='formProcessingVelocity.action'" "method='post'") 
                 #tag (Checkbox "name='checkbox'" "label='A checkbox'" "fieldValue='checkbox_value'") 
                 #tag (File "name='file'" "label='A file field'") 
                 #tag (Hidden "name='hidden'" "value='hidden_value'") 
                 #tag (Label "label='A label'") 
                 #tag (Password "name='password'" "label='A password field'") 
                 #tag (Radio "name='radio'" "label='Radio buttons'" "list={'One', 'Two', 'Three'}") 
                 #tag (Select "name='select'" "label='A select list'" "list={'One', 'Two', 'Three'}" 
                        "emptyOption=true") 
                 #tag (Textarea "name='textarea'" "label='A text area'" "rows='3'" "cols='40'") 
                 #tag (TextField "name='textfield'" "label='A text field'") 
                 #tag (Submit "value='Send Form'") 
          #end 
          </body> 
          </html>

          ex02-success.vm

          <html> 
          <head> 
          <title>WebWork Tutorial Lesson 4.2 - Example 2</title> 
          </head> 
          <body> 
          <p>UI Form Tags Example result using Velocity:</p> 
          <ul> 
                 <li>checkbox: $!checkbox</li> 
                 <li>file: $!file</li> 
                 <li>hidden: $!hidden</li> 
                 <li>password: $!password</li> 
                 <li>radio: $!radio</li> 
                 <li>select: $!select</li> 
                 <li>textarea: $!textarea</li> 
                 <li>textfield: $!textfield</li> 
          </ul> 
          </body> 
          </html>

          FormProcessingAction.java:(同4.1.1節(jié)的例子)

          FormProcessingAction-validation.xml:(同4.1.1節(jié)的例子)

          下面的例子使用Velocity實(shí)現(xiàn)4.1.1節(jié)中自定義組件的例子,注意#param的用法:

          ex03.vm

          <html> 
          <head> 
          <title>WebWork Tutorial - Lesson 4.2 - Example 3</title> 
          </head> 
          <body> 
          <p>Custom Component Example:</p> 
          <p> 
          #bodytag (Component "template=/files/templates/components/datefield.vm") 
                 #param ("label" "Date") 
                 #param ("name" "mydatefield") 
                 #param ("size" "3") 
          #end 
          </p> 
          </body> 
          </html>

          /files/templates/components/datefield.vm(同4.1.1節(jié)的例子)

           

          4.3、在WebWork中使用Freemaker(略)

          posted on 2007-06-28 09:39 junky 閱讀(795) 評(píng)論(0)  編輯  收藏 所屬分類: web

          主站蜘蛛池模板: 托里县| 建宁县| 鹤峰县| 墨玉县| 铁岭县| 山西省| 教育| 攀枝花市| 阿图什市| 沾益县| 云浮市| 榆树市| 上思县| 托克托县| 阿拉尔市| 石渠县| 浑源县| 山东省| 越西县| 静乐县| 五大连池市| 墨脱县| 彩票| 清河县| 清水河县| 广德县| 长沙县| 扶绥县| 海原县| 申扎县| 韩城市| 荥经县| 普格县| 遂溪县| 登封市| 沧州市| 新津县| 辉县市| 康保县| 安康市| 东至县|