/**java
* 实现功能表单提交给action1先处理,再交由action2进行处理,中间传递参数a,bjsp
**/this
/**spa
* 1. 配置文件code
**/blog
<action name="action1" class="com.test.Action1"> <result name="success" type="chain"> action2 </result> </action> <action name="action2" class="com.test.Action2"> <result name="success" type="chain"> /index.jsp </result> </action>
/**get
* 2.java代码input
**/io
public class Action1{ //input private String a; //output private String c; public String execute(){ return "success"; } public String getA(){ return a; } public void setA(String a){ this.a = a; } public String getB(){ return c+" getB "; } public void setC(String c){ this.c = c; } }
public class Action2{ private String a; private String b; private String c; public String execute(){ System.out.println(a); System.out.println(b); System.out.println(c); return "success"; } public String getA(){ return a; } public void setA(String a){ this.a = a; } public void setB(String b){ this.b = b; } public String getB(){ return b; } public void setC(String c){ this.c = c; } }
/**
* 说明class
* 1)配置文件中result的type属性设置为chain, result标签内写传给的action的name属性值
* 2)action之间传递参数的实质是靠set和get方法,有没有对应的属性或属性名字叫什么其实不要紧,通常状况下都是先写属性,再生成对应的set和get方法,这是
标准的作法,但不必定要这样作, 要想把action1中的参数a传递给action2中的b,只需action1中提供getXX方法返回a的值,action2中提供setXX方法给b
赋值便可
* 3)特别须要注意的一点是action1传给action2时除了拦截器chain起做用外,表单处理拦截器param也会起做用,并且param在chain以后起做用,故若是param和
chain都给同一个参数赋值的话,param会覆盖chain的效果,例如表单提交了一个c, action1里对c进行了处理, 处理结果仍是保留在c上,接下来你想把处理后
的c传给action2处理,action2也用c来接收,这时候就会出现action2中的c的值是表单提交过来的值而不是action1传过来的值,给你一种参数没传递的错觉,
实际上是被覆盖了,通常个人作法是action1中提供getB方法返回c的值,action2中不要提供setC而是提供setB来给c赋值
**/