struts2 action重定向
struts2的结果类型:
<action name="loginAction" class="com.itheima.action.LoginAction"> <result name="success" <strong><span style="color:#FF6666;">type="chain"</span></strong>> <param name="actionName">successAction</param> <param name="name">${name}</param> </result> </action>struts2中的结果类型有下面几种:
<result-types> <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/> <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/> <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/> <result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/> <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/> <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/> <result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/> <result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/> <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/> <result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" /> <result-type name="postback" class="org.apache.struts2.dispatcher.PostbackResult" /> </result-types>
重要的有几下几种:
dispatcher —— 请求转发到一个页面 (默认),不能够用这样的方式转发到一个action
chain —— 一个action请求转发至还有一个 action
redirect —— 响应重定向到一个页面,也能够实现响应重定向到action
redirectAction —— 一个action响应重定向至还有一个 action
stream —— 文件下载
注意:假设结果类型改成 type = “chain” ,则加了那些携带的參数都不会起到作用,由于chain 是请求转发,还在一次请求内,本来就携带了參数,不须要再去声明,也不能够加入别的參数,不会起到作用,由于一開始表单提交信息后,该次请求的信息以固定。
一般action重定向到jsp,可是有时会重定向到还有一个action
首先看下LoginAction.java
package com.itheima.action; public class LoginAction { private String name; public String getName() { return name; } public String execute() { //名字固化,所以不须要setXXX()方法 name="lcl"; return "success"; } }
SuccessAction.java
package com.itheima.action; public class SuccessAction { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public String execute() { return "success"; } }
假设重定向时传递參数,有下面几种方式:
<action name="loginAction" class="com.itheima.action.LoginAction"> <result type="redirect">successAction?name=${name}</result> </action> <action name="successAction" class="com.itheima.action.SuccessAction"> <result type="redirect">/login.jsp?name=${name}</result> </action>
<action name="loginAction" class="com.itheima.action.LoginAction"> <result type="redirectAction">successAction?name=${name}</result> </action> <action name="successAction" class="com.itheima.action.SuccessAction"> <result type="redirect">/login.jsp?name=${name}</result> </action>
<action name="loginAction" class="com.itheima.action.LoginAction"> <result type="redirectAction"> <param name="actionName">successAction</param> <param name="name">${name}</param> </result> </action> <action name="successAction" class="com.itheima.action.SuccessAction"> <result type="redirect">/login.jsp?name=${name}</result> </action>可是以下这样的配置不行:
<action name="loginAction" class="com.itheima.action.LoginAction"> <result type="redirect"> <param name="actionName">successAction</param> <param name="name">${name}</param> </result> </action> <action name="successAction" class="com.itheima.action.SuccessAction"> <result type="redirect">/login.jsp?name=${name}</result> </action>