Result的首要职责封装Action层到View层的跳转逻辑。而Struct2的Action是一个与Web容器无关的POJO。
在Action执行完毕后,框架需要把代码的执行权重新提交给web容器,并转向到响应的页面或其它类型的View层。其中的跳转逻辑就由struct的result来完成。
那么Result在处理跳转的过程中,有三种处理类型type,即redirect、redirectAction、chain。
1、当type="redirect"时,处理完后重定向到一个视图资源(如jsp页面),请求参数全部丢失,action处理结果也全部丢失,结果可以是action配置名+后缀名。
2、当type="redirectActioin"时,处理完后重定向到一个action,请求参数全部丢失,action处理结果也全部丢失,结果只能写配置名,不能带后缀“.action”:
<package name="loginAction" namespace="/" extends="abstract_struts">
<action name="login" class="loginAction">
<result name="success" type="redirectAction">main</result>
<result name="fail">/fail.jsp</result>
</action>
<!-- 该action只负责跳转,用struts提供的ActionSupport -->
<action name="main" class="userMainAction">
<result name="success">/main.jsp</result>
<interceptor-ref name="myInterceptor" />
</action>
</package>
3、当type="chain"时,处理完后转发到一个action,请求参数全部丢失,action处理结果不会丢失。
<package name="userActions" namespace="/userAdmin" extends="abstract_struts">
<action name="main" class="userAction">
<result>/userAdmin/userMain.jsp</result>
</action>
<action name="*_*" class="userAction" method="{1}">
<result name="successSelect" type="chain">main</result>
<result name="failSelect">/fail.jsp</result>
<interceptor-ref name="myInterceptor" />
</action>
</package>