上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的处理结果。