dispatcher 为默认跳转类型,用于返回一个视图资源(如:jsp) : c, w+ e: `. T* a+ S8 d
Xml代码 :
<result name="success">/main.jsp</result>
( |* ?% ^. f% @以上写法使用了默认,其完整的写法为: 6 L7 Q8 _) B- {1 B8 ~0 X, s$ p6 {
<result name="success" type="dispatcher">
$ n9 b8 g s- T <param name="location">/maini.jsp</param> 3 X0 V% t4 |0 n6 q. n
</result>
用于页面转发,页面跳转过程一直是同一个线程,Action中的数据一直保存在。; C" _/ n* ?& S. ^ A1 d
location只能是页面,不能是另一个action(可用type="chain"解决)。
! M9 |8 U) c" P
redirect 类型用于重定向到一个页面,另一个action或一个网址。 $ z% f O) s3 Y: `: X
Xml代码:
<result name="success" type="redirect">aaa.jsp</result>
) x t. k2 @4 g/ m" Q<result name="success" type="redirect">bbb.action</result> : t5 M2 A$ R2 a) s: z e
<result name="success" type="redirect">www.52itstyle.com</result> 缺点:redirect把一个http返回码(SUCCESS)以及返回的页面位置一起重新发给web服务器,容纳后由web服务器产生一个新的HTTP请求,就会产生一个新的线程,保存在原来Action执行的线程中的数据就无法访问。
" M& T4 [0 f$ ?" ~所以,result需要包含Action的数据,那么redirect不是一个可行的办法。因为新的HTTP请求时在Servlet容器的新的线程中处理的,ActionContext中的所有状态都不会存在。
处理方法:
(方法一):
' i0 W3 a/ @6 `2 `<result name="topic" type="redirect">/topicAction!findTopics.do?topicId=${topicId}</result>
$ M$ K& L% G% W4 R% T(方法二): . N4 `6 J* x, W1 \, P+ }" S
<result name="topic" type="redirect-action"> . }1 w3 \. V9 ]% B3 a! v
<param name="actionName">findTopics</param>
8 F9 ?. X( a$ w2 O" e1 O, [<param name="topicId">${topicId}</param>
! W9 p0 _3 b2 V9 u3 a6 y5 o</result>
* r3 k" r' T4 | k9 ~' f
redirect-action 结果类型使用ActionMapperFactory提供的ActionMapper来重定向请求到另外一个action * c8 L. w e6 A- e( q- _
Xml代码:
<result name="err" type="redirect-action"> 8 k* E2 H+ b; v6 a. v/ R
<param name="actionName">重定向的Action名</param> . D5 D* G# v; V$ @( y/ K
<param name="namespace">重定向Action所在的名字空间</param> 6 x* d* }- j+ K& _+ D; f% {4 |; E
</result> . y! B) Y' |# J9 v0 E! ?2 f1 J
redirect和redirect-action两种结果类型在使用上其实并没有什么区别,只是写法不同而已。
7 L) U8 ^; Q1 y( G7 Q! E* c4 B
chain 用于把相关的几个action连接起来,共同完成一个功能。 * I1 g6 N# ^5 G5 v% o, W( U/ I( ]
Xml代码:
<action name="step1" class="test.Step1Action">
0 s) \$ H+ y! q6 V9 o! n <result name="success" type="chain">step2.action</result> 6 u( c# ^: P$ {3 c+ i2 z
</action> 0 z% C4 s2 y- a
<action name="step2" class="test.Step2Action"> ' ~' H3 Y+ [8 `) N& K7 z8 I
<result name="success">finish.jsp</result> 0 W7 O, b. `: u0 S3 J, {; b# @
</action> ; r" |" B! d2 }2 D
处于chain中的action属于同一个http请求,共享一个ActionContext
3 D9 U5 A3 W G( ^4 [6 u/ @% s
1 I: ^2 G/ K5 u- I) Y/ D4 [3 pplaintextj 结果类型用于直接在页面上显示源代码
Xml代码:
<result name="err" type="plaintext">
+ z; u2 ?8 @: }5 l' z$ k <param name="location">具体的位置</param>
V6 l5 Z8 ]- l1 w, l <param name="charSet">字符规范(如GBK)</param>
, }! _* l( u4 A0 i& M</result>