1.Result是什么和它能干什么?
它指示了Action执行完成后下一个页面在哪里。
2.ResultType是什么?
所谓ResultType,就是具体执行Result的类,由他来决定采用哪一种视图技术将执行结果展现给用户。
3.再Struts 2 中,预定义了一些Result的字符串常量:
SUCCESS: 表示Action执行成功,显示结果视图给用户,值为字符串常量的小写形式(success)
NONE: 表示Action执行成功,但不显示视图给用户,值同理。
ERROR: Action执行失败,显示错误页面给用户
INPUT: Action需要更多的输入信息,回到input对应的页面
LOGIN:表示因用户没有登录而没有正确执行,将返回该登录视图。
4.一些预定义的Result:
1.dispatcher
它对应的实现类是ServletDispatcherResult。
在它的ResultType的实现中,调用了javax.servlet.RequestDispatcher类中的forward方法,
因此它实现的功能就是页面跳转,且通过它的跳转将保存原来页面中request的数据。
对于dispatcher的使用范围,除了可以配置JSP外,还可以配置其他的web资源,比如Sevlet等。
使用dispatcher的ResultType不能访问其他Web应用中的Web资源
完整的配置:平时我们只是把result对应的JSP路径直接作为< result >元素中的文本来配置,这是简化的方法,实际上对于dispatcher还有两个参数可以配置:
其中parse参数决定了location是否可以通过OGNL来引用参数,默认为true
2.redirect
它也是用来实现跳转到下一个页面的,与上一个不同的是,它的特点是全新的请求,这就意味着本次请求和跳转到下一个页面的请求的对象是不同的,所以其数据是不同的。
使用它的ResultType可以访问其他Web应用中的资源,甚至是任何你想要访问的对象。
其他的和上面差不多。
3.chain
chain是一种特殊的视图结果,用来将Action执行完后链接到另一个Action中继续执行,新的Action使用上一个Action的上下文,数据也会被传递。(实现多层Action处理)
注意:chain不能再result的配置中传递参数。
5.全局Result
有一些Result需要由多个Action共用,这个时候,就可以配置全局Result,让多个Action共享这些全局的Result,而不是每个Action都要配置一个跳转到某一页面的result
例子:
有了全局Result后我们需要了解在Action运行之后,根据execute方法的返回值寻找Result的顺序:
局部–>全局–>父包,祖父包…的全局Result
6.PreResultListener
在实际开发中,常常需要在Action执行完毕后且Result还没开始的时候做一些功能处理,我们就需要实现PreResultListener类来实现。
例子:
7.自定义Result
其实开发自定义Result很简单,只需要实现com.opensysphony.xwork2.Result接口就可以了:
实例: