1.Struts2的两种结果:
Struts2的Action处理用户请求结束后,返回一个普通字符串---逻辑视图名,必须在struts.xml文件中完成逻辑视图和物理视图资源的映射,才可让系统转到实际的视图资源。简单的说,结果配置是告诉Struts2框架:当Action处理结束时,系统下一步做什么,系统下一步应该调用哪个物理视图资源来显示处理结果。
局部结果:将< result…/>作为< action…/>元素的子元素配置。
全局结果:将< result…/>作为< global-result…/>元素的子元素配置
2.配置< result…/>元素时通常需要指定如下两个属性:
name:该属性指定所配置的逻辑视图名。
type:该属性指定结果类型。
最典型的配置片段:
<action name="login" class="slow.LoginAction">
<!-- 为success的逻辑视图配置Result,type属性指定结果类型 -->
<result name="success" type="dispatcher">
<!-- 指定该逻辑视图对应的实际视图资源 -->
<param name="location">/thank_you.jsp</param>
</result>
</action>
可简写为:
<action name="login" class="slow.LoginAction">
<!-- 为success的逻辑视图配置Result,省略type属性 -->
<result name="success">/thank_you.jsp</result>
</action>
3.Struts2支持的结果类型
Struts2提供的一系列结果类型,放在struts-default.xml(struts2-core-2.2.1.jar文件的根路径下)
4.plainText结果类型(很少用)
用于显示实际视图资源的源代码。
<action name="login" class="slow.LoginAction">
<!-- 指定Result的类型为plainText类型 -->
<result type="plainText">
<!-- 指定实际的视图资源 -->
<param name="location">/welcome.jsp</param>
<!-- 指定使用指定的字符集来处理页面代码 -->
<param name="charSet">GBK</param>
</result>
</action>
5.redirect结果类型
①dispatcher结果类型与redirect结果类型相对,dispatcher结果类型是将请求forward(转发)到指定的JSP资源;而redirect结果类型,则意味着请求redirect(重定向)到指定的视图资源。
②dispatcher结果类型与redirect结果类型的差别主要就是转发和重定向的差别:重定向会丢失所有的请求参数、请求属性——当然也丢失了Action的处理结果。
③使用redirect结果类型的效果是,系统将调用HttpServletResponse的sendRedirect(String)方法来重定向指定视图资源,这种重定向的效果就是重新产生一个请求,因此所有的请求参数、请求属性、Action实例和Action中封装的属性全部丢失。
<action name="login" class="org.LoginAction">
<!-- 指定结果的类型为redirect,这意味着系统该Action将重定向到hello.jsp页面-->
<result type="redirect">/hello.jsp</result>
</action>
6.redirectAction结果类型
①与redirect结果类型非常相似,一样是重新生成一个全新的请求。但与redirect结果类型区别在于:redirectAction使用ActionMapperFactory提供的ActionMapper来重定向请求。
②当需要让一个Action处理结束后,直接将请求重定向(是重定向,不是转发)到lingyigeAction时,我们应该使用这种结果类型。
③配置redirectAction结果类型时,可以指定如下两个参数。
actionName:该参数指定重定向的Action名。
namespace:该参数指定需要重定向的Action所在的命名空间。
<action name="login" class="org.LoginAction">
<!-- 配置一个redirectAction结果类型的Result,重定向另一个命名空间的Action -->
<result type="redirectAction">
<!-- 指定重定向的actionName -->
<param name="actionName">dashboard</param>
<!-- 指定重定向的Action所在的命名空间 -->
<param name="namespace">/secure</param>
</result>
</action>
7.
动态结果类型
在指定视图资源时候使用了表达式语法。
<action name="crud_*" class="org.CrudAction" method="{1}">
<result name="input">/input.jsp</result>
<result>/{1}.jsp</result>
</action>
8.Action属性值决定物理视图资源
用户在文本框内输入请求的资源,系统将自动跳转到对应的资源。
9.全局结果
Struts2的< result…/>元素配置,也可放在< global-results…/>元素中配置,当在< global-results…/>元素中配置< result…/>元素时,该< result…/>元素配置了一个全局结果,全局结果将对所有的Action都有效。1
10.使用PreResultListener
①PreResultListener是一个监听器接口,它可以在Action完成控制处理之后,系统转入实际的物理视图之间被回调。
②Struts2应用可由Action、拦截器添加PreResultListener监听器,添加PreResultListener监听器通过ActionInvocation的addPreResultListener()方法完成。一旦为Action添加了PreResultListener监听器,该监听器就可以在应用转入实际物理视图之前回调该监听器的beforeResult()方法;一旦为拦截器添加了PreResultListener监听器,该监听器会对该拦截器所拦截的所有Action都起作用。