常用的跳转类型:

重定向到jsp页面或action(同一个Action)

转发到页面

重定向到其他Action,客户端跳转

转发到Action,服务器跳转

转发和重定向设置:        

<action name="deptAction" class="com.syaccp.erp.action.DeptAction">
            <result name="success">/WEB-INF/jsp/basic/dept_list.jsp</result>
            <result name="editView">/WEB-INF/jsp/basic/dept_edit.jsp</result>
</action>

    上例action中,success对应的视图是通过默认的转发(dispatch)跳转的。editView作为增删改的一部分,应该通过重定向来跳转页面,这样必须显式声明type=redirect,来达到重定向的效果。这时editView的内容改为action中一个方法更合适。如:

<action name="deptAction" class="com.syaccp.erp.action.DeptAction"> 
            <result name="success">/WEB-INF/jsp/basic/dept_list.jsp</result>
            <result name="editView" type="redirect">deptAction!select.action</result>
</action>

这里在执行edit方法后返回editView字符串,将会再执行select方法,跟DeptEditServlet里response.sendRedirect("DeptListServlet")类似

上例只是重定向同一个Action类中的其他方法,开发中可能还需要重定向到其他Action类中,这时就需要用到type属性的另一个值:redirectAction:

LoginAction.java

<action name="login" class="gz.itcast.action.LoginAction">
                <result name="login">/login1.jsp</result>
                <!-- redirect:   重定向到同一个Action -->
                <result name="login1" type="redirect">login!login.action</result>
                
                <!-- redirectAction:  重定向到其他Action -->
                <result name="success" type="redirectAction">book.action</result>
</action>

LoginAction中某个方法返回字符串为success,则将跳转到另外一个Action去(通过book.action),执行其中的execute方法。

如果Action在其他包里面,则前面应加上包名,例:index/xxxAction。

BookAction.java

<!-- 图书模块 -->
    <package name="book" extends="struts-default" namespace="/">
            <action name="book" class="gz.itcast.action.BookAction">
                <result name="success">/index1.jsp</result>
            </action>
    </package> 
 
 
 
<!-- 全局视图配置: 把该包下的所有action共用的视图都机集中在这里写 -->
<global-results>
<result name="success">/login.jsp</result>
</global-results>
 
<!-- 默认配置 
必填项
可选项 。默认配置:  ActionSupport类   该类继承自struts-default (<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />)
可选。默认配置
    result:
可选。默认配置: success
可选。默认配置: dispatcher--转发到页面
                                            redirect: 代表重定向
                          常用的跳转类型
重定向到jsp或action。同一个Action
转发到页面
重定向到其他Action,客户端跳转(数据不能传递)
转发到Action,服务器跳转(数据能传递)可以在不同Action中通过request共享数据
 
 -->
全部使用默认配置的action的作用 :专门用于转发到WEB-INF下的页面 -->
 <action name="book">
jsp/login.jsp</result>
 </action>
/**
 * 登录逻辑的Action
 * @author APPle
 *
 */
public class LoginAction implements Action{
//默认方法
public String execute() throws Exception {
System.out.println("执行了LoginAction的execute方法");
//往request存放数据
ServletActionContext.getRequest().setAttribute("name", "eric");
 
return "login1";
}
 
public String login() throws Exception {
System.out.println("执行了LoginAction的login方法");
//从request获取数据
String name = (String)ServletActionContext.getRequest().getAttribute("name");
System.out.println("name="+name);
return "success";
}
}
 
<action name="login_1" class="gz.itcast.action.LoginAction">
<!-- redirectAction:  地址栏会变-day28_struts/login_2.action -->  
<!--<result name="login1" type="redirectAction">login_2</result>-->
<result name="login1" type="chain">login_2</result>
</action>
 
<action name="login_2" class="gz.itcast.action.LoginAction" method ="login" >
<result name="success" >/login1.jsp</result>
</action>
 
执行了LoginAction的execute方法
执行了LoginAction的login方法
name=eric
------------------------
<action name="login" class="gz.itcast.action.LoginAction">
<result name="">/login1.jsp</result>
<!--redirect:   重定向到同一个Action -->
<result name="login1" type="redirect">login!login.action</result>
 
<!--redirectAction:  重定向到其他Action--> 
<result name="success" type="redirectAction">book.action</result>
</action>
/**
 * 登录逻辑的Action
 * @author APPle
 *
 */
public class LoginAction implements Action{
//默认方法
public String execute() throws Exception {
System.out.println("执行了LoginAction的execute方法");
//往request存放数据
ServletActionContext.getRequest().setAttribute("name", "eric");
 
return "login1";
}
 
public String login() throws Exception {
System.out.println("执行了LoginAction的login方法");
//从request获取数据
String name = (String)ServletActionContext.getRequest().getAttribute("name");
System.out.println("name="+name);
return "success";
}
}
 
<action name="login_1" class="gz.itcast.action.LoginAction">
<!-- redirectAction:  地址栏会变-day28_struts/login_2.action -->  
<!--<result name="login1" type="redirectAction">login_2</result>-->
<result name="login1" type="chain">login_2</result>
</action>
 
<action name="login_2" class="gz.itcast.action.LoginAction" method ="login" >
<result name="success" >/login1.jsp</result>
</action>
 
执行了LoginAction的execute方法
执行了LoginAction的login方法
name=eric
------------------------
<action name="login" class="gz.itcast.action.LoginAction">
<result name="">/login1.jsp</result>
<!--redirect:   重定向到同一个Action -->
<result name="login1" type="redirect">login!login.action</result>
 
<!--redirectAction:  重定向到其他Action--> 
<result name="success" type="redirectAction">book.action</result>
</action>
 
<!-- 全局视图配置: 把该包下的所有action共用的视图都机集中在这里写 -->
<global-results>
<result name="success">/login.jsp</result>
</global-results>
 
<!-- 默认配置 
必填项
可选项 。默认配置:  ActionSupport类   该类继承自struts-default (<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />)
可选。默认配置
    result:
可选。默认配置: success
可选。默认配置: dispatcher--转发到页面
                                            redirect: 代表重定向
                          常用的跳转类型
重定向到jsp或action。同一个Action
转发到页面
重定向到其他Action,客户端跳转(数据不能传递)
转发到Action,服务器跳转(数据能传递)可以在不同Action中通过request共享数据
 
 -->
全部使用默认配置的action的作用 :专门用于转发到WEB-INF下的页面 -->
 <action name="book">
jsp/login.jsp</result>
 </action>
<!-- 全局视图配置: 把该包下的所有action共用的视图都机集中在这里写 -->
<global-results>
<result name="success">/login.jsp</result>
</global-results>
 
<!-- 默认配置 
必填项
可选项 。默认配置:  ActionSupport类   该类继承自struts-default (<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />)
可选。默认配置
    result:
可选。默认配置: success
可选。默认配置: dispatcher--转发到页面
                                            redirect: 代表重定向
                          常用的跳转类型
重定向到jsp或action。同一个Action
转发到页面
重定向到其他Action,客户端跳转(数据不能传递)
转发到Action,服务器跳转(数据能传递)可以在不同Action中通过request共享数据
 
 -->
全部使用默认配置的action的作用 :专门用于转发到WEB-INF下的页面 -->
 <action name="book">
jsp/login.jsp</result>
 </action>
/**
 * 登录逻辑的Action
 * @author APPle
 *
 */
public class LoginAction implements Action{
//默认方法
public String execute() throws Exception {
System.out.println("执行了LoginAction的execute方法");
//往request存放数据
ServletActionContext.getRequest().setAttribute("name", "eric");
 
return "login1";
}
 
public String login() throws Exception {
System.out.println("执行了LoginAction的login方法");
//从request获取数据
String name = (String)ServletActionContext.getRequest().getAttribute("name");
System.out.println("name="+name);
return "success";
}
}
 
<action name="login_1" class="gz.itcast.action.LoginAction">
<!-- redirectAction:  地址栏会变-day28_struts/login_2.action -->  
<!--<result name="login1" type="redirectAction">login_2</result>-->
<result name="login1" type="chain">login_2</result>
</action>
 
<action name="login_2" class="gz.itcast.action.LoginAction" method ="login" >
<result name="success" >/login1.jsp</result>
</action>
 
执行了LoginAction的execute方法
执行了LoginAction的login方法
name=eric
------------------------
<action name="login" class="gz.itcast.action.LoginAction">
<result name="">/login1.jsp</result>
<!--redirect:   重定向到同一个Action -->
<result name="login1" type="redirect">login!login.action</result>
 
<!--redirectAction:  重定向到其他Action--> 
<result name="success" type="redirectAction">book.action</result>
</action>
 
<!-- 全局视图配置: 把该包下的所有action共用的视图都机集中在这里写 -->
<global-results>
<result name="success">/login.jsp</result>
</global-results>
 
<!-- 默认配置 
必填项
可选项 。默认配置:  ActionSupport类   该类继承自struts-default (<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />)
可选。默认配置
    result:
可选。默认配置: success
可选。默认配置: dispatcher--转发到页面
                                            redirect: 代表重定向
                          常用的跳转类型
重定向到jsp或action。同一个Action
转发到页面
重定向到其他Action,客户端跳转(数据不能传递)
转发到Action,服务器跳转(数据能传递)可以在不同Action中通过request共享数据
 
 -->
全部使用默认配置的action的作用 :专门用于转发到WEB-INF下的页面 -->
 <action name="book">
jsp/login.jsp</result>
 </action>