/**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賦值
**/