1.关于Result我们首先来学习一下结果类型 result type。
先来看struts.xml.
struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <action name="r1"> <result type="dispatcher"> /r1.jsp </result> </action> <action name="r2"> <result type="redirect"> /r2.jsp </result> </action> <action name="r3"> <result type="chain"> r1 </result> </action> <action name="r4"> <result type="redirectAction"> r2 </result> </action> </package> </struts>
result的默认类型是dispatch,用于跳转到一个视图。
redirect可以进行跳转到一个新的页面。
这两者的区别可以这么解释一般注册的页面比如说提交到register.action注册完信息以后如果不跳转 用户可能会一直刷新这个页面 如果设计不好的程序 就会一直重复注册,注册完redirect出去 转到别的没有业务处理的页面只给提示一下注册成功。
<result type="chain">用于跳转到其他的action。若要访问其他包的action,可以用如下写法
<result name="r3" type="chain">
<param name="actionName">重定向的Action名</param>
<param name="namespace">重定向Action所在的名字空间</param>
</result>
<result type="redirectAction">用于直接跳转到其他action。
2.接下来通过一个小项目讲义下Global Result 全局结果集。
下图是主页
有四个链接,内容是
传递一个参数type 分别是 1 2 3.在UserAction.java里定义了一个type变量。当type为1返回“success”,为2返回“error”,为其他情况返回“mainpage”。
UserAction.java
package com.tfj.struts2.action; import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport{ private int type; public int getType() { return type; } public void setType(int type) { this.type = type; } @Override public String execute() throws Exception { if(type==1) return "success"; else if(type==2) return "error"; else return "mainpage"; } }
struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.devMode" value="true" /> <package name="user" namespace="/user" extends="struts-default"> <global-results> <result name="mainpage"> /mainpage.jsp </result> </global-results> <action name="user" class="com.tfj.struts2.action.UserAction" > <result name="success"> /success.jsp </result> <result name="error"> /error.jsp </result> </action> </package> <package name="admin" namespace="/admin" extends="user"> <action name="admin" class="com.tfj.struts2.action.UserAction" > <result name="success"> /admin.jsp </result> </action> </package> </struts>
返回的值为success 和error的情况都很好理解,当type为3时返回mainpage,但是在对应的action里并没有一个result叫mainpage。这时候就会去访问global result 。这种方式解决了假如有很多action都要去访问同一个地方这样我们把他们写到同一个Global result 减少配置量。
再看<package name="admin" namespace="/admin" extends="user">
<action name="admin" class="com.tfj.struts2.action.UserAction" >
<result name="success">
/admin.jsp
</result>
</action>
</package>
这段代码访问admin/admin?type=3时,也会访问到mainpage,这是由于admin包extends user包,这样就可以访问它的global result。
项目文件 Result part1.rar