组成Action配置的各个元素,例如 : 1actions 2interceptors 3results 4package 一 :包的配置 Packages是把 1Actions 2Results 3Result Types 4Interceptors 5Stacks 分组成逻辑单元的一种方式,以分享一些共同设置. 包跟对象一样可以扩展,也可以被"子"包覆盖部分属性.
1拦截器 2拦截器栈 3action等配置 注意,配置文件是被至上而下处理的,所以"被继承"的包必需定义在"继承"包的上面. 2 : "abstract"表示一个包为抽象包 这样的包可以被继承,但是不能有action的定义 3 : xwork.xml中包的例子 1<xwork> 2 3 <include file="webwork-default.xml"/> 4 5 <include file="config-browser.xml"/> 6 7 <include file="xwork-continuations.xml"/> 8 9 <include file="xwork-tags.xml"/> 10 11 <include file="xwork-validation.xml" /> 12 13 <include file="xwork-actionchaining.xml" /> 14 15 <include file="xwork-ajax.xml" /> 16 17 <include file="xwork-fileupload.xml" /> 18 19 <include file="xwork-person.xml" /> 20 21 <include file="xwork-wait.xml" /> 22 23 <include file="xwork-token.xml" /> 24 25 <include file="xwork-model-driven.xml" /> 26 27 <include file="xwork-filedownload.xml" /> 28 29 <package name="default" extends="webwork-default"> 30 <interceptors> 31 <interceptor-stack name="crudStack"> 32 <interceptor-ref name="params" /> 33 <interceptor-ref name="defaultStack" /> 34 </interceptor-stack> 35 </interceptors> 36 37 <default-action-ref name="showcase"/> 38 39 <action name="showcase"> 40 <result>showcase.jsp</result> 41 </action> 42 43 <action name="date" class="com.opensymphony.webwork.showcase.DateAction"> 44 <result name="success">/date.jsp</result> 45 </action> 46 47 </package> 48 49 <package name="skill" extends="default" namespace="/skill"> 50 <default-interceptor-ref name="crudStack"/> 51 52 <action name="list" class="com.opensymphony.webwork.showcase.action.SkillAction" method="list"> 53 <result>/empmanager/listSkills.jsp</result> 54 <interceptor-ref name="basicStack"/> 55 </action> 56 <action name="edit" class="com.opensymphony.webwork.showcase.action.SkillAction"> 57 <result>/empmanager/editSkill.jsp</result> 58 <interceptor-ref name="params" /> 59 <interceptor-ref name="basicStack"/> 60 </action> 61 <action name="save" class="com.opensymphony.webwork.showcase.action.SkillAction" method="save"> 62 <result name="input">/empmanager/editSkill.jsp</result> 63 <result type="redirect">edit.action?skillName=${currentSkill.name}</result> 64 </action> 65 <action name="delete" class="com.opensymphony.webwork.showcase.action.SkillAction" method="delete"> 66 <result name="error">/empmanager/editSkill.jsp</result> 67 <result type="redirect">edit.action?skillName=${currentSkill.name}</result> 68 </action> 69 </package> 70 71 <package name="employee" extends="default" namespace="/employee"> 72 <default-interceptor-ref name="crudStack"/> 73 74 <action name="list" class="com.opensymphony.webwork.showcase.action.EmployeeAction" method="list"> 75 <result>/empmanager/listEmployees.jsp</result> 76 <interceptor-ref name="basicStack"/> 77 </action> 78 <action name="edit" class="com.opensymphony.webwork.showcase.action.EmployeeAction"> 79 <result>/empmanager/editEmployee.jsp</result> 80 <interceptor-ref name="crudStack"><param name="validation.excludeMethods">execute</param></interceptor-ref> 81 </action> 82 <action name="save" class="com.opensymphony.webwork.showcase.action.EmployeeAction" method="save"> 83 <result name="input">/empmanager/editEmployee.jsp</result> 84 <result type="redirect">edit.action?empId=${currentEmployee.empId}</result> 85 </action> 86 <action name="delete" class="com.opensymphony.webwork.showcase.action.EmployeeAction" method="delete"> 87 <result name="error">/empmanager/editEmployee.jsp</result> 88 <result type="redirect">edit.action?empId=${currentEmployee.empId}</result> 89 </action> 90 </package> 91 92</xwork>
名称空间属性允许把action配置分成不同的名称空间,这样您可以在具有不同类和参数名称空间中使用相同的名字的action了. 这一点是和Webwork1.x不同,在Webwork1.x中所有的action名字都是全局的不能再一个应用程序中重用. 2 :默认名称空间 默认名称空间用""(空字符串)表示.如果系统在指定的名称空间中没有找到某个action,就会到默认名称空间中查找.你可以在所有用"extends"扩展的名称空间外配置全局action,就像Webwork 1.x那样不指定名称空间(即作为默认名称空间). 名称空间也可以用来实现系统安全,例如action名字之前可以有个路径,这个路径就是Webwork 2.0 ServletDispatcher用的名称空间,你可以在路径上使用J2EE声明式的安全限制,这种方式很容易的实现和维护。 3 :根名称空间 Webwork中以"/"命名的名称空间叫做根名称空间,它是请求直接来自应用程序根路径的时候的名称空间. 和其他名称空间一样,如果在根名称空间中没有所需的action别名,系统会回到默认名称空间中查找.
1<package name="default"> 2 <action name="foo" class="mypackage.simpleAction> 3 <result name="success" type="dispatcher">greeting.jsp</result> 4 </action> 5 <action name="bar" class="mypackage.simpleAction"> 6 <result name="success" type="dispatcher">bar1.jsp</result> 7 </action> 8</package> 9 10<package name="mypackage1" namespace="/"> 11 <action name="moo" class="mypackage.simpleActtion"> 12 <result name="success" type="dispatcher">moo.jsp</result> 13 </action> 14</package> 15 16<package name="mypackage2" namespace="/barspace"> 17 <action name="bar" class="mypackage.simpleAction"> 18 <result name="success" type="dispatcher">bar2.jsp</result> 19 </action> 20</package> 解释 : 如果请求为/barspace/foo.action,系统会在/barspace空间中查找foo这个action,如果找不到,系统继续在默认名称空间中查找.除非指定成其他的,否则默认空间是"".在我们上面的例子中,/barspace空间中没有foo这个action,这样默认空间中的/foo.action会被找到并执行. 如果请求为/moo.action,系统会在根空间('/')中查找'moo' action别名,如果没找到再到默认空间中查找.在这个例子中,moo这个action别名存在因此会被执行.如果返回success,请求指向moo.jsp. 如果请求为'/foo.action',系统会在'/'空间中查找,找到后执行,如果没有,继续查找默认空间.在本例中,foo这个action别名不存在于'/'空间,所以系统回到默认空间中查找并执行. 注意:名称空间只有一个级别.例如如果url是'/barspace/myspace/bar.action',Webwork先试着查找'/barspace/myspace',在本例中是不存在的.接着就直接到 默认空间 中查找'bar'这个action别名.结果在默认空间中的bar会被执行. |
|