Result 的常见类型:
dispatcher
相当于 JSP 中的 标签,在服务器端执行跳转。
redirect
很显然的相当于 response.sendRedirect(String url);。
chain
这个与 dispatcher 相似,不过 chain 只能跳转到另一个 action ,而 dispatcher 只能跳转到其他 JSP、Html 页面。
redirectAction
见名知义,不解释。
全局 Result:
定义全局 Result 的好处是,我们可以在任意 action 之要返回相同的字符串,如 haha,都可以定位到全局 Result ,而不需要一一指明。
1: <global-results>
2: <result name="haha">/Test_add_success.jsp result>
3: global-results>
注意,全局 Result 必须定义在一个包里,即一个 package 标签下。假设我们刚才定义的全局 action 是在名为 wawa 的包里。
定义的全局 Result 默认仅作用于当前 package ,如果想在其他包中使用这个全局 Result ,就得让其他的包继承定义了全局 Result 的包:
1: <package name="default" namespace="/" extends="wawa">
动态结果集:
我们还可以在 Action 中指定 Result 标签的值:
1: package com.cdp.struts2;
2:
3: import com.opensymphony.xwork2.ActionSupport;
4:
5: public class TestAction extends ActionSupport {
6:
7: private String param = "";
8: private String dynamicResult;
9:
10: //Getters and Setters Omitted Here...
11:
12: public String execute() {
13: if (param.equals("1")) {
14: dynamicResult = "/Test_add_success.jsp";
15: } else {
16: dynamicResult = "/Test_add_error.jsp";
17: }
18: return SUCCESS;
19: }
20:
21: }
然后 dynamicResult 就会被当做参数进值栈信息,我们在 struts.xml 中访问值栈信息就可以得到正确的访问页面了:
1: <action name="dynamic" class="com.cdp.struts2.TestAction">
2: <result>${dynamicResult} result>
3: action>
因为我们可以通过 ${} 在 struts.xml 中去值栈里面的参数,所以我们可以利用这一特性,向 result 指定的页面传入参数,在 struts.xml 中这一配置:
1: <action name="param" class="com.cdp.struts2.TestAction">
2: <result type="redirect">Test_add_success.jsp?param=${param} result>
3: action>
然后在 Test_add_success 里面调用熟悉的 request.getParameter() 方法实现参数的取值。还可以通过 取值。
当然,我们也可以利用动态结果集设定 dynamicResult 的值来实现这一过程。
只有在 redirect 的时候需要传递参数,dispatcher 是默认共用一个 request 的,也就是不用手工实现传递参数。