Struts 2.x权威指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.6.7 redirectAction结果类型

redirectAction结果类型与redirect类型非常相似,一样是重新生成一个全新的请求。但与redirect 结果类型的区别在于:redirectAction 使用 ActionMapperFactory 提供的 ActionMapper来重定向请求。

当需要让一个 Action 处理结束后,直接将请求重定向(是重定向,不是转发)到另一个Action时,应该使用redirectAction结果类型。

注意

如果需要让一个Action处理结束后,将请求转发到另外一个Aciton时,应该使用chain结果类型。

配置redirectAction结果类型时,可以指定如下两个参数。

actionName:该参数指定重定向的Action名。

namespace:该参数指定需要重定向的Action所在的命名空间。

下面是一个使用redirectAction结果类型的配置实例。

<package name="public" extends="struts-default">
    <action name="login" class="org.crazyit.struts2.action.LoginAction">
    <!-- 配置一个redirectAction类型的Result,重定向另一个命名空间的Action -->
          <result type="redirectAction">
                <!-- 指定重定向的actionName -->
          <param name="actionName">dashboard</param>
                <!-- 指定重定向的Action所在的命名空间-->
          <param name="namespace">/secure</param>
          </result>
    </action>
</package>
<package name="secure" extends="struts-default" namespace="/secure">
    <!-- 定义被重定向的Action -->
    <action name="dashboard" class="org.crazyit.struts2.action.Dashboard">
          <result>dashboard.jsp</result>
          <!-- 配置一个redirectAction类型的Result,重定向同一个命名空间的Action -->
          <result name="error" type="redirectAction>error</result>
    </action>
    <action name="error">
          <result>/WEB-INF/content/error.jsp</result>
    </action>
</package>

使用redirectAction结果类型时,系统将重新生成一个新请求,只是该请求的URL不是一个具体的视图资源,而是一个 Action。因此,前一个 Action 的处理结果、请求参数、请求属性都会丢失。

提示:

对于redirect和redirectAction两种结果类型,都是重新生成一个新请求,区别是前者通常用于生成一个对具体资源的请求,而后者通常用于生成一个对其他Action的请求。两个结果类型都会丢失请求参数、请求属性和前一个 Action的处理结果。