xwork.xml配置详解
xwork.xml中 组成Action配置的各个元素
组成Action配置的各个元素,例如 :
1actions
2interceptors
3results
4package
一 :包的配置
Packages是把
1Actions
2Results
3Result Types
4Interceptors
5Stacks
分组成逻辑单元的一种方式,以分享一些共同设置.
包跟对象一样可以扩展,也可以被"子"包覆盖部分属性.
1 : "extends"属性使一个package可以继承一个或多个前面package中的 :
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" extends="default" namespace="/skill">
50 <default-interceptor-ref name="crudStack"/>
51
52 <action name="list" method="list">
53 <result>/empmanager/listSkills.jsp</result>
54 <interceptor-ref name="basicStack"/>
55 </action>
56 <action name="edit" />
59 <interceptor-ref name="basicStack"/>
60 </action>
61 <action name="save" 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" 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" method="list">
75 <result>/empmanager/listEmployees.jsp</result>
76 <interceptor-ref name="basicStack"/>
77 </action>
78 <action name="edit" 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" 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>
二 :名称空间的配置
1 :名称空间
名称空间属性允许把action配置分成不同的名称空间,这样您可以在具有不同类和参数名称空间中使用相同的名字的action了.
这一点是和Webwork1.x不同,在Webwork1.x中所有的action名字都是全局的不能再一个应用程序中重用.
2 :默认名称空间
默认名称空间用""(空字符串)表示.如果系统在指定的名称空间中没有找到某个action,就会到默认名称空间中查找.你可以在所有用"extends"扩展的名称空间外配置全局action,就像Webwork 1.x那样不指定名称空间(即作为默认名称空间).
名称空间也可以用来实现系统安全,例如action名字之前可以有个路径,这个路径就是Webwork 2.0 ServletDispatcher用的名称空间,你可以在路径上使用J2EE声明式的安全限制,这种方式很容易的实现和维护。
3 :根名称空间
Webwork中以"/"命名的名称空间叫做根名称空间,它是请求直接来自应用程序根路径的时候的名称空间.
和其他名称空间一样,如果在根名称空间中没有所需的action别名,系统会回到默认名称空间中查找.
4 :名称空间的例子
1<package name="default">
2 <action name="foo" type="dispatcher">greeting.jsp</result>
4 </action>
5 <action name="bar" type="dispatcher">bar1.jsp</result>
7 </action>
8</package>
9
10<package name="mypackage1" namespace="/">
11 <action name="moo" type="dispatcher">moo.jsp</result>
13 </action>
14</package>
15
16<package name="mypackage2" namespace="/barspace">
17 <action name="bar" type="dispatcher">bar2.jsp</result>
19 </action>
20</package>
解释 :
如果请求为/barspace/bar.action,系统首先查找'/barspace'名称空间,如果找到bar action便执行,如果没有继续到默认名称空间中查找.在这个例子中'/barspace'空间中存在bar别名,所以它会被执行,如果返回success结果,请求将指向bar2.jsp.
如果请求为/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会被执行.