Struts2从一个action转到另一个action的两种方法
在Struts2中,Action处理完用户请求后,将会返回一个字符串对象,这个字符串对象就是一个逻辑视图名。Struts 2通过配置逻辑视图名和物理视图之间的映射关系,一旦系统收到Action返回的某个逻辑视图名,系统就会把相应的物理视图呈现给浏览者。
Struts 2的结果类型决定了Action处理结束后,下一步将会调用那种视图资源来呈现处理结果。默认是dispatcher,该结果类型指定使用JSP作为视图资源。但是我们会有这样的要求:要求从一个Action转到另一个Action中去。
从一个Action直接跳到另一个Action中,Struts提供了两种结果类型可以实现:chain、redirect。
我们从Servlet中学到重定向是不能保留参数的,也就是说重定向了,request对象就会无效了。同样redirect就像Servlet中的重定向,它也不能够保留request对象保存的参数。但是chain可以。所以两种的区别就在于chain能够保留request对象,而redirect不可以。
struts.xml的配置

1 <package name="mystruts1" extends="struts-default" namespace="/mystruts1">
2 <!-- 第一个Action -->
3 <action name="test_*" class="com.action.TestAction" method="{1}">
4 <result name="text_chain" type="chain">result_resultChain</result>
5 <result name="text_redirect" type="redirect">result_resultRedirect</result>
6 </action>
7
8 <!-- 第二个Action -->
9 <action name="result_*" class="com.action.ResultAction" method="{1}"></action>
10 </package>

Action1:

1 public class TestAction {
2 public String testChain(){
3 HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
4 request.setAttribute("param", "我是chain结果类型...");
5 return "text_chain";
6 }
7
8 public String testRedirect(){
9 HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
10 request.setAttribute("param", "我是redirect结果类型...");
11 return "text_redirect";
12 }
13 }

Action2:

1 public class ResultAction {
2
3 public String resultChain(){
4 HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
5 System.out.println(request.getAttribute("param"));
6 return null;
7 }
8
9
10 public String resultRedirect(){
11 HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
12 System.out.println(request.getAttribute("param"));
13 return null;
14 }
15 }

部署项目后,当在浏览器中输入:http://localhost:8080/struts2_01/mystruts1/result_resultRedirect.action。结果如下
得到为null。由此可见Redirect并不能获取request对象保存的参数。
当输入http://localhost:8080/struts2_01/mystruts1/result_testChain.action,得到如下结果:
得到了正确的结果,所有chain可以获得Request对象保存的参数。
所以:
1. 需要保存前一个action的属性信息时使用,保存住action1的request对象:
1 <result type= "chain " name="a2">action2</result>
2. 不保存前一个action的参数可以用这种方法:
1 <result type= "redirectAction "> action2</result>
转:http://www.cnblogs.com/chenssy/archive/2012/09/10/2678406.html
Struts2从一个action转到另一个action的两种方法的更多相关文章
- 设置一个DIV块固定在屏幕中央(两种方法)
设置一个DIV块固定在屏幕中央(两种方法) 方法一: 对一个div进行以下设置即可实现居中. <style> #a{ position: fixed; top: 0px; left: 0p ...
- 10.我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。 请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形. 请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 是不是发现看不懂,哈哈:编程题就是这样,一定要归纳,手写过程: n ...
- ToStringBuilder学习(二):两种方法用法优缺点及一个问题
研究ApacheCommon源码, 先从一个最简单的开始,即围绕Object类里的toString方法自动化实现的一系列类. 怎么来自动化地实现toString方法, 有两种:反射和手 ...
- 可采用两种方法得到一个EJB对象
(本文是转载其他人的技术文章,觉得说得挺浅显易懂,特借来学习) 在前面学习的例子中,只有一个EJB,但是对于一个真实的项目,EJB的数量可以有很多,而且EJB之间也会互相调用,那么在一个EJB ...
- F - Goldbach`s Conjecture 对一个大于2的偶数n,找有多少种方法使两个素数的和为n;保证素数a<=b; a+b==n; a,b都为素数。
/** 题目:F - Goldbach`s Conjecture 链接:https://vjudge.net/contest/154246#problem/F 题意:对一个大于2的偶数n,找有多少种方 ...
- JMeter接口测试-提取动态列表最后一个值的两种方法
前言 在用JMeter做接口测试时,我们经常会遇到,一个接口返回一个json串,在这个json串中,某个节点的值是一个列表,而且这个列表的长度是动态变化的.今天我们来学习两种提取动态列表最后一个值的两 ...
- 两种方法使用js读写cookie实现一个底部广告浮层效果
下面一个案例实现了js实现一个页面浮层并且使用两种方法使用js读写cookie:来实现用户关闭广告的显示状态: 读者可以将下面代码复制到一个html文件试试效果:html的pre标签未两种js实现的方 ...
- Androidstudio实现一个简易的加法器——分享两种方法实现(日常作业练习)
Androidstudio实现一个简易的加法器——分享两种方法实现(日常作业练习) ...
- JavaScript两种方法来定义一个函数
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
随机推荐
- 2017-1-2 nfs服务器配置
配置apt工具集 1.打开配置文件 sudo vim /etc/apt/sources.list 2.将上面文件中内容删除,选择阿里云的软件源加入 # deb cdrom:[Ubuntu 16.04 ...
- Linux下的网卡驱动程序的编写过程(转)
工作需要写了我们公司一块网卡的linux驱动程序.经历一个从无到有的过程,深感技术交流的重要.Linux作为挑战微软垄断的强有力武器,日益受到大家的喜爱.真希望她能在中国迅速成长.把程序文档贴出来,希 ...
- paramiko 登录linux主机后执行tail后返回数据不完整解决方法。
def get_sql_log(host,port,user,password,key_words,out_put_filename): commond='cd crm-app/;./tailall. ...
- 为maven插件设置参数的三种方法
很多的maven插件都提供了丰富的可选参数,用户可以通过设置特定的参数值来控制maven插件的行为.设置插件参数的方法主要有三种,分别是命令行设置,POM文件中为插件设置全局参数和POM文件中为插件设 ...
- SQLSERVER不带JOIN的语句与带JOIN语句的区别
//1.连接两个表查询 SELECT * FROM table1 t1,table2 t2 //2.连接两个表查询 SELECT * FROM table1 join table2 on table1 ...
- WCF初体验(C#操作Exchange)
最近再做一个Exchange的客户端维护工具,遇到了很多问题. 由于刚接触C#和Exchange,所以还需要继续学习.在此记录一下,只是一个新手的记录. 环境: 服务器:Exchang ...
- mvc路由,mvc区域
1.路由在进行匹配时,会默认匹配第一个路由信息 2.路由规则的{control}和{action}时不能改变的 3.路由规则可以中间字符可以随便定义,但是{control}和{action}必须使用一 ...
- 关于post请求超出最大长度
这是因为asp.net默认限制最大上传文件大小为4096kb,而我上传了6000kb+所以超出了限制,需要修改项目的web.config文件即可解决,可以将最大文件长度设置为你需要的长度,我这里设置为 ...
- Linux--01入门
一.远程控制台 Linux和windows不太一样,win系列默认都有桌面,我们买了服务器,一般都用远程桌面去连接. 而linux一般都是为了追求低成本或者高性能,可能我们就不需要桌面了,所以使用命令 ...
- Android引用项目出现ClassNotFoundException
Android中在引用其他工程,尤其是github中的相关库时,如果引用关系设置的不对,很容易出现ClassNotFoundException,例如下面的异常信息 07-26 12:47:51.549 ...