WebWork 2 : xwork.xml
This page last changed on May 26, 2004 by ctran.
示例<?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> 活动<action name="formTest" class="com.opensymphony.webwork.example.FormAction" method="processForm">
活动是WebWork的基本工作单元, 它正是定义了活动. 活动通常有一个请求(通常是点击按钮, 或提交表单). 主要的action元素有两部分, 友好的名字(在URL中引用, 如saveForm.action)和对应的"处理(handler)"类. 可选的"method"属性告诉WebWork应当调用活动的哪个方法. 如果你不填写method属性, WebWork缺省调用execute(). 如果活动没有execute()方法, 也没有在xml中指定method属性, WebWork将抛出异常.同样, 你也可以在表单中指定"actionName!something"来告诉WebWork调用"doSomething"方法. 例如, "formTest!save.action"将调用FormAction的"save"方法. 该方法必须是public且没有参数: public String save() throws Exception { ... return SUCCESS; } 活动的所有配置都可以用在"actionName!something"中(截取器, 结果类型等) 结果<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活动执行后下一步该做什么. "name"属性对应活动execute() 方法返回的结果代码. "type"属性表示使用哪个结果类型(参见结果类型). 可以使用"param"元素向视图传递参数: <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> Action.SUCCESS = "success"; Action.NONE = "none"; Action.ERROR = "error"; Action.INPUT = "input"; Action.LOGIN = "login"; 你可以扩充你认为适合的结果代码(如"missing-data"). 大多数情况下你只需使用SUCCESS和ERROR, SUCCESS将前进到下一个页面. 如果你只需要指定"location"属性, 可以使用简写形式:<result name="missing-data" type="dispatcher">/form.jsp</result> 参阅webwork-default.xml或Result Types以了解标准结果类型 截取器截取器允许定义活动执行前后的代码. 截取器是编写Web应用的强大工具. 一些最常用的实现是:
必须先定义截取器(给它命名)然后才能联接成栈: <interceptors> <interceptor name="security" class="com.mycompany.security.SecurityInterceptor"/> <interceptor-stack name="defaultComponentStack"> <interceptor-ref name="component"/> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors> 要在活动中使用它们: <action name="VelocityCounter" class="com.opensymphony.webwork.example.counter.SimpleCounter"> <result name="success">...</result> <interceptor-ref name="defaultComponentStack"/> </action> 更多细节参见截取器. 视图WebWork支持JSP和Velocity作为应用表示层. 本例使用JSP文件. Webwork附带了标签库(taglibs). 你可以在JSP中项组件一样使用标签库.下面是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> 处理经过如下:
包含为了易于管理大规模开发活动(包含大量活动和配置), 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文件中). 本文的大部分内容由Matt Dowell<matt.dowell@notiva.com>提供 |
Document generated by Confluence on Dec 14, 2004 16:37 |