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还有两个参数可以配置:

result包的含义 result?_自定义


其中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包的含义 result?_Web_02


有了全局Result后我们需要了解在Action运行之后,根据execute方法的返回值寻找Result的顺序:

局部–>全局–>父包,祖父包…的全局Result

6.PreResultListener

在实际开发中,常常需要在Action执行完毕后且Result还没开始的时候做一些功能处理,我们就需要实现PreResultListener类来实现。

例子:

result包的含义 result?_字符串常量_03


result包的含义 result?_Web_04

7.自定义Result

其实开发自定义Result很简单,只需要实现com.opensysphony.xwork2.Result接口就可以了:

result包的含义 result?_自定义_05

实例:

result包的含义 result?_result包的含义_06


result包的含义 result?_字符串常量_07