xwork.xml配置說明
示例
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.0.dtd"> <xwork> <include file="webwork-default.xml"/> <package name="default" extends="webwork-default"> <interceptors> <interceptor-stack name="defaultComponentStack"> <interceptor-ref name="component"/> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors> <default-interceptor-ref name="defaultStack"/> <action name="SimpleCounter" class="com.opensymphony.webwork.example.counter.SimpleCounter"> <result name="success" type="dispatcher">/success.jsp</result> <interceptor-ref name="defaultComponentStack"/> </action> <!-- - Velocity implementation of the SimpleCounter. Also demonstrate a more verbose version of result element --> <action name="VelocityCounter" class="com.opensymphony.webwork.example.counter.SimpleCounter"> <result name="success" type="velocity"> <param name="location">/success.vm</param> </result> <interceptor-ref name="defaultComponentStack"/> </action> <!-- - Different method can be used (processForm). --> <action name="formTest" class="com.opensymphony.webwork.example.FormAction" method="processForm" > <result name="success" type="dispatcher">/formSuccess.jsp</result> <result name="invalid.token" type="dispatcher">/form.jsp</result> <interceptor-ref name="defaultStack"/> <interceptor-ref name="token"/> </action> </package> </xwork>
活動(dòng)
<action name="formTest" class="com.opensymphony.webwork.example.FormAction" method="processForm">
活動(dòng)是WebWork的基本工作單元, 它正是定義了活動(dòng). 活動(dòng)通常有一個(gè)請(qǐng)求(通常是點(diǎn)擊按鈕, 或提交表單). 主要的action元素有兩部分, 友好的名字(在URL中引用, 如saveForm.action)和對(duì)應(yīng)的"處理(handler)"類.
可選的"method"屬性告訴WebWork應(yīng)當(dāng)調(diào)用活動(dòng)的哪個(gè)方法. 如果你不填寫method屬性, WebWork缺省調(diào)用execute(). 如果活動(dòng)沒有execute()方法, 也沒有在xml中指定method屬性, WebWork將拋出異常.同樣, 你也可以在表單中指定"actionName!something"來告訴WebWork調(diào)用"doSomething"方法. 例如, "formTest!save.action"將調(diào)用FormAction的"save"方法. 該方法必須是public且沒有參數(shù):
public String save() throws Exception { ... return SUCCESS; }
活動(dòng)的所有配置都可以用在"actionName!something"中(截取器, 結(jié)果類型等)
結(jié)果
<result name="missing-data" type="dispatcher"> <param name="location">/form.jsp</param> <param name="parameterA">A</param> <param name="parameterB">B</param> </result>
Result元素告訴WebWork活動(dòng)執(zhí)行后下一步該做什么. "name"屬性對(duì)應(yīng)活動(dòng)execute() 方法返回的結(jié)果代碼. "type"屬性表示使用哪個(gè)結(jié)果類型(參見結(jié)果類型). 可以使用"param"元素向視圖傳遞參數(shù):
<result-types> .... <result-type name="header" class="com.opensymphony.webwork.dispatcher.HttpHeaderResult"/> </result-types> <result name="no-content" type="header"> <param name="status">204</param> <param name="headers.customHeaderA">A</param> <param name="headers.customHeaderB">B</param> </result>
下面是WebWork內(nèi)置的標(biāo)準(zhǔn)結(jié)果代碼(定義在Action接口中), 包括:
Action.SUCCESS = "success"; Action.NONE = "none"; Action.ERROR = "error"; Action.INPUT = "input"; Action.LOGIN = "login";
你可以擴(kuò)充你認(rèn)為適合的結(jié)果代碼(如"missing-data"). 大多數(shù)情況下你只需使用SUCCESS和ERROR, SUCCESS將前進(jìn)到下一個(gè)頁面.
如果你只需要指定"location"屬性, 可以使用簡(jiǎn)寫形式:<result name="missing-data" type="dispatcher">/form.jsp</result>
參閱webwork-default.xml或Result Types以了解標(biāo)準(zhǔn)結(jié)果類型
截取器
截取器允許定義活動(dòng)執(zhí)行前后的代碼. 截取器是編寫Web應(yīng)用的強(qiáng)大工具. 一些最常用的實(shí)現(xiàn)是:
- 安全檢查(確保用戶已登陸)
- 跟蹤紀(jì)錄 (記錄每一個(gè)活動(dòng))
- 檢查執(zhí)行瓶頸 (在活動(dòng)前后啟動(dòng)計(jì)時(shí)器, 以檢查應(yīng)用瓶頸)
也可以將截取器連接起來創(chuàng)建一個(gè)截取器棧. 如果你想完成登陸檢查, 安全檢查, 并記錄每個(gè)活動(dòng)調(diào)用, 使用截取器棧會(huì)十分容易.
必須先定義截取器(給它命名)然后才能聯(lián)接成棧:
<interceptors> <interceptor name="security" class="com.mycompany.security.SecurityInterceptor"/> <interceptor-stack name="defaultComponentStack"> <interceptor-ref name="component"/> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors>
要在活動(dòng)中使用它們:
<action name="VelocityCounter" class="com.opensymphony.webwork.example.counter.SimpleCounter"> <result name="success">...</result> <interceptor-ref name="defaultComponentStack"/> </action>
注意: 可以引用攔截器或棧的名字
更多細(xì)節(jié)參見截取器.
視圖
WebWork支持JSP和Velocity作為應(yīng)用表示層. 本例使用JSP文件. Webwork附帶了標(biāo)簽庫(taglibs). 你可以在JSP中項(xiàng)組件一樣使用標(biāo)簽庫.下面是form.jsp的片斷:
<%@ taglib prefix="ww" uri="webwork" %> <html> <head><title>Webwork Form Example</title></head> <body> <ww:form name="myForm" action="'formTest'" namespace="/" method="POST"> <table> <ww:textfield label="First Name" name="'formBean.firstName'" value="formBean.firstName"/> <ww:textfield label="Last Name" name="'formBean.lastName'" value="formBean.lastName"/> <ww:submit value="Save Form"/> </table> </ww:form> </body>
處理經(jīng)過如下:
- WebWork監(jiān)控以.action結(jié)尾的URI(定義在web.xml中)
- WebWork在活動(dòng)定義中查找活動(dòng)formTest.
- WebWork創(chuàng)建formTest并調(diào)用com.opensymphony.webwork.example.FormAction的方法processForm(定義在xwork.xml中).
- 該方法處理成功并返回SUCCESS
- WebWork將返回值SUCCESS轉(zhuǎn)換成地址formSuccess.jsp(定義在b class="strong">xwork.xml中)并執(zhí)行重定向.
包含
為了易于管理大規(guī)模開發(fā)活動(dòng)(包含大量活動(dòng)和配置), WebWork允許在xwork.xml中包含其他配置文件 :
<xwork> <include file="webwork-default.xml"/> <include file="user.xml"/> <include file="shoppingcart.xml"/> <include file="product.xml"/> .... </xwork>
被包含文件必須與xwork.xml的格式相同(具有相同的doctype及其它)并放置在類路徑中(通常位于/WEB-INF/classes或/WEB-INF/lib的jar文件中).
posted on 2007-04-14 14:26 朱巖 閱讀(1492) 評(píng)論(0) 編輯 收藏 所屬分類: webwork文章