Struts2中Action之ResultType
我们在struts-defalut.xml文件中可以看到如下图所示:
这些类型是配置文件所带的。接下来我们主要讲解我标注出来的这个,其他的我就不做详解了,有兴趣的可以去试试。
web.xml文件我在这里就不配置了。直接从action开始
1.0当type取值为chain时:
chain:转发到action
创建LoginAction继承ActionSupport类定义方法
package cn.struts2.action; import com.opensymphony.xwork2.ActionSupport; import java.util.Map; /** * Created by accp on 2017/3/1. */ public class LoginAction extends ActionSupport { public String list(){ System.out.println("====进入==LoginAction====list============"); return "list"; } public String add(){ System.out.println("====进入====LoginAction==add============"); return "add"; } }
创建ShoppingAction
package cn.struts2.action; import com.opensymphony.xwork2.ActionSupport; import org.apache.struts2.ServletActionContext; import javax.servlet.http.HttpServletRequest; /** * Created by accp on 2017/3/2. */ public class ShoppingAction extends ActionSupport { public String list(){ System.out.println("========进入ShoppingAction=====list============"); HttpServletRequest request = ServletActionContext.getRequest(); String uname = (String) request.getAttribute("uname"); System.out.println(uname); return "list"; } public String add(){ System.out.println("======进入ShoppingAction=======add============"); return "add"; } }
创建两个jsp页面,填写上不同的内容。
最主要的接下来配置struts.xml
....... <!--转发到action--> <action name="loginAdd" class="cn.struts2.action.LoginAction" method="add"> <result name="add" type="chain"> <param name="actionName">shoppingList</param> <param name="namespace">/</param> </result> </action> <action name="shoppingList" class="cn.struts2.action.ShoppingAction" method="list"> <result name="list">/success.jsp</result> <result name="success"></result> </action>
<param name="actionName">loginList</param>:指向的是你要转向的action的逻辑名称,要特别注意!!!!!!!
actionName:系统定义。在struts-defalut.xml------>result-type----->ActionResultType
运行效果:
因为在一次转发内携带数据是有效的,我们就可以得到上图的结果。
1.1type取值为dispatcher
dispatcher:转发到页面(以LoginAction类为例)
<!--转发到页面--> <action name="loginAction2" class="cn.struts2.action.LoginAction" method="add"> <result name="add" type="dispatcher"> /success.jsp </result> </action>
直接指向页面即可,不需要再返回action通过别的方法。
1.2type取值为redirectAction
redirectAction:重定向action
struts.xml配置:
<!--重定向action--> <action name="loginAction3" class="cn.struts2.action.LoginAction" method="add"> <result name="add" type="redirectAction"> <param name="actionName">shoppingList</param> <param name="namespace">/</param> </result> </action> <action name="shoppingList" class="cn.struts2.action.ShoppingAction" method="list"> <result name="list">/index.jsp</result> </action>
上述方法不变运行,效果图如下:
从两张图中我们可以很清晰的看出,地址栏发生了很大的变化,再看结果,由于我们把数据方法的是request作用域中,在一次转发内
可以拿到数据,但是重定向相当于重新请求,携带的数据消失,得到null。
1.3type取值为redirect
redirect:重定向到页面
<!--重定向到页面--> <action name="loginAction4" class="cn.struts2.action.ShoppingAction" method="list"> <result name="list" type="redirect"> /success.jsp </result> </action>
重定向地址栏都会发生变化,在使用的时候要根据自己的需求选择合适的类型。
1.4type取值为plainText
plainText:纯文本
struts.xml:
<!--plainText--> <action name="loginAction5" class="cn.struts2.action.LoginAction" method="add"> <result name="add" type="plainText"> <param name="charSet">UTF-8</param> <param name="location">/index.jsp</param> </result> </action> 复制代码
<param name="charSet">UTF-8</param>:
location:指向那个页面。
效果图:
得到的是源代码。很神奇是吧,你可以试试其他的类型。
就到这里吧............