常用的跳转类型:
redirect: 重定向到jsp页面或action(同一个Action)
dispatcher: 转发到页面
redirectAction: 重定向到其他Action,客户端跳转
chain: 转发到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>
<!-- 默认配置 name: 必填项 class: 可选项 。默认配置: ActionSupport类 该类继承自struts-default (<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />) method: 可选。默认配置 result: name: 可选。默认配置: success type: 可选。默认配置: dispatcher--转发到页面 redirect: 代表重定向 常用的跳转类型 redirect: 重定向到jsp或action。同一个Action dispatcher: 转发到页面 redirectAction: 重定向到其他Action,客户端跳转(数据不能传递) chain: 转发到Action,服务器跳转(数据能传递)可以在不同Action中通过request共享数据
--> <!-- 全部使用默认配置的action的作用 :专门用于转发到WEB-INF下的页面 --> <action name="book"> <result>/WEB-INF/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>
|
浙公网安备 33010602011771号