1、Result就是Action中某个处理方法执行完毕后返回的一个字符串,用来指示下一个页面是哪个基本配置如下:
<action name="someAction" class="com.consion.demo.SomeAction">
<result name="success">/page/jsp/welcome.jsp</result>
<result name="input">/page/jsp/login.jsp</result>
</action>
其中Action返回的字符串对应于result中的name属性值。
2、Result类型有5中预设:
a、SUCCESS:执行成功
b、NONE:执行成功,但不需要显示视图给用户。
c、ERROR: 执行失败,显示错误页面给用户。
d、INPUT:表示执行Action需要更多的信息,回到INPUT对应的页面。
e、LOGIN:表示用户没有登录,将返回登录页面。
3、Result中type属性值:
a、dispatcher(默认)
如果使用JSP则这种方式是最常用的,它的实现类是是ServletDispatcherResult,这个类对RequestDispatcher进行再包装,并调用该类的forward()方法,这意味着有一个request对象,这样我们就可以拥有这个request对象中的parameter、Head相
关数据、Attribute以及Cookie。但是如果这个web资源是另一个Action的话,则不能使用这个,需要另一个ResultType:chain.
完整的配置如下:
<result name="toWelcome" type="dispatcher">
<param name="location">/demo/page/jsp/welcome.jsp</param>
<param name="parse">true</param>
</result>
以上的location是将要跳转到哪个页面,parse是否通过OGNL来引用参数,默认为true。
b、redirect
这种方式相当于响应重定向,是一次全新的请求。注意这种方式如果使用get方式将参数传递到另一个页面,则接受需要用request方式(<%=request.getParameter("account")%>)或者EL表达式方式(${param['account']})。如果使用struts2中
的<s:property value="account"/>则不会获取到该值,因为这种方式是通过struts2的值栈来获取的,但是值栈中没有有这个值,因为没有通过某个Action来为这个属性赋值,而是直接通过跳转到下一个页面这种方式。
<result name="toWelcome" type="redirect">
<param name="location">/demo/page/jsp/welcome.jsp?account=${message}</param>
<param name="parse">true</param>
</result>
c、chain.
这是一种特殊的ResultType,用来从Action执行完链接到另一个Action的,这个新的Action会带着上一个Action的ActionContext据徐执行的。
<result name="toWelcome" type="chain">
<param name="actionName">someAction.action</param>
<param name="namespace">/</param>
</result>
4、全局的Result。可以配置登录页面,让没有登录的用户直接跳转到登录页面。
<package name="somepackage" extends="struts-default" >
<global-results>
<result name="login">/login.jsp</result>
</global-results>
<action>
........
</action>
</package>
5、Struts2的异常映射,不用在Action中try-catch
局部异常映射:
<package name="somepackage" extends="struts-default" >
<action ...>
<exception-mapping result="math-exception" exception="java.lang.ArithmeticException"/>
<exception-mapping result="math-exception" exception="java.lang.Exception"/>
<result name="math-exception" >/error.jsp</result >
........
</action>
</package>
全局异常映射:
<package name="somepackage" extends="struts-default" >
<global-results>
<result name="math-exception">/error.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="math-exception" exception="java.lang.ArithmeticException"/>
<exception-mapping result="math-exception" exception="java.lang.Exception"/>
</global-exception-mappings>
<action ...>
........
</action>
</package