dispatcher 为默认跳转类型,用于返回一个视图资源(如:jsp) x) v7 }+ V* R5 \7 ^, J
Xml代码 :
<result name="success">/main.jsp</result>
; l3 A" T- A% w: A- ~% I以上写法使用了默认,其完整的写法为:
! ~6 p( }" @; X8 j9 T N( A. L<result name="success" type="dispatcher">
* |, q0 ]0 O7 a7 L/ U <param name="location">/maini.jsp</param> & s. ~! p" W h' K8 n4 H( L& F+ Z" F- w
</result>
用于页面转发,页面跳转过程一直是同一个线程,Action中的数据一直保存在。) e0 ^, W$ Y- M) b. N* W/ i1 m
location只能是页面,不能是另一个action(可用type="chain"解决)。
, J& a% N8 p, ?. n/ o1 R; \- K
redirect 类型用于重定向到一个页面,另一个action或一个网址。 & M' q' e2 w6 N* h$ z/ `7 W
Xml代码:
<result name="success" type="redirect">aaa.jsp</result> ) ^" Y: O8 g3 U# M& F3 D
<result name="success" type="redirect">bbb.action</result>
9 y* R/ X3 a7 i+ n( Q S2 K& A6 e<result name="success" type="redirect">www.52itstyle.com</result> 缺点:redirect把一个http返回码(SUCCESS)以及返回的页面位置一起重新发给web服务器,容纳后由web服务器产生一个新的HTTP请求,就会产生一个新的线程,保存在原来Action执行的线程中的数据就无法访问。
0 R2 M6 f. P6 `) v2 l所以,result需要包含Action的数据,那么redirect不是一个可行的办法。因为新的HTTP请求时在Servlet容器的新的线程中处理的,ActionContext中的所有状态都不会存在。
处理方法:
(方法一): V1 S% u- n+ D( U1 U2 I
<result name="topic" type="redirect">/topicAction!findTopics.do?topicId=${topicId}</result> / P' J* u9 `8 Q3 @
(方法二): 4 h, p; t, I" l- n
<result name="topic" type="redirect-action"> # O" f7 a7 V" @2 s& B, T4 R" [6 E
<param name="actionName">findTopics</param> 9 ?) m5 B% k, b- G( Y3 l
<param name="topicId">${topicId}</param>
5 ]! g( [+ j4 @# [( w</result>
3 W% G. m' L- u; `2 h
redirect-action 结果类型使用ActionMapperFactory提供的ActionMapper来重定向请求到另外一个action
. d$ \: S* \9 l& fXml代码:
<result name="err" type="redirect-action"> ) Z0 C% `; L: I# V
<param name="actionName">重定向的Action名</param> : p' x: P: C9 U3 S$ v
<param name="namespace">重定向Action所在的名字空间</param>
2 n8 f4 s) X6 I2 g5 \7 z</result> + T" V3 G5 X% c9 u: v
redirect和redirect-action两种结果类型在使用上其实并没有什么区别,只是写法不同而已。
2 J4 E& O/ M9 R( e8 Zchain 用于把相关的几个action连接起来,共同完成一个功能。
7 C( C) ]% { }& UXml代码:
<action name="step1" class="test.Step1Action"> ' e! q. F4 R0 M% Q
<result name="success" type="chain">step2.action</result>
% i; r s4 e! d! a5 G2 [& j</action>
( _% [, R! L1 I7 P<action name="step2" class="test.Step2Action"> 3 ]+ Q' E F9 s# C" ?4 P' e1 `3 y
<result name="success">finish.jsp</result>
6 ?# r- ^& @! ^7 k. o</action>
/ ~% O4 F: V( y& e9 |$ f- d- W* V处于chain中的action属于同一个http请求,共享一个ActionContext & d* J+ O2 d/ h' a1 c0 T
2 G" p/ t- g7 i7 l( E# Z1 H5 cplaintextj 结果类型用于直接在页面上显示源代码
Xml代码:
<result name="err" type="plaintext">
6 e5 s3 D" F" M) Q5 u" ^ <param name="location">具体的位置</param>
3 G2 h j8 \/ c+ E2 j" e <param name="charSet">字符规范(如GBK)</param>
" E/ M, Z$ @# a+ `3 V R' i</result>