top
Loading...
用ActionForm一次獲取表單所有參數
用過Jakarta Struts的兄弟都知道ActionForm的使用方法和她在Struts框架中所起的作用,但是您是否在為要給ActionForm編寫一大堆setter和getter方法而感到厭倦和疲憊呢?的確,我是厭倦了,所以我要尋求新的方法。我第一反映就是想使用Map接口,將所有的表單參數全部放進HashMap中,然后在Action中get出這個Map,并進行業務邏輯的操作。有了想法當然要去試驗了,實踐才是檢驗真理的唯一標準。



首先要編寫一個擴展ActionForm的類。代碼如下(由于篇幅,我只列出了代碼的關鍵部分):

12packagecom.jacktan.struts.formbean;
34importjava.util.*;
5 importjavax.servlet.http.*;
6 importorg.apache.struts.action.*;
8 publicclassCustomFormextendsActionForm{
10 privateMapformvalueMap=newHashMap();
12 publicvoidsetFormvalueMap(Mapp_FormvalueMap){
14this.formvalueMap=p_FormvalueMap;
15}
16 publicMapgetFormvalueMap(){
18returnthis.formvalueMap;
19}
20 publicvoidsetFormvalue(Stringkey,Objectvalue){
22formvalueMap.put(key,value);
23}
24 publicObjectgetFormvalue(Stringkey){
26returnformvalueMap.get(key);
27}
28}

下面對上面的代碼一一做解釋:

第11行定義了一個HashMap類的實例變量,這個Map用于存放表單遞交上來的參數值,作為鍵值對存在;
第13行的setFormvalueMap()方法用于設置實例變量formvalueMap;

第17行的getFormvalueMap()方法用于獲取實例變量formvalueMap,這個方法將在Action類中調用,替代了以前在Action類中調用大量的(CustomForm)form.getXXX()方法;

第21行是關鍵的方法,setFormvalue()這個方法就是取代以前在ActionForm中大量的setXXX()方法,用于接受表單傳遞上來的輸入值。注意這個方法的參數,key是一個String類型的,用作Map的key,value是Object類型的,這個參數就是表示表單傳送過來的各個輸入值。

第25行是getFormvalue()方法,用于從Map中根據key返回一個value對象。

好了,ActionForm的任務完成了,不過離目標還有好大一段距離,目前只完成了三分之一的工作。我們繼續干!

有了ActionForm接下來就是要編寫Action類了,代碼如下(由于篇幅,我只列出了代碼的關鍵部分):

12packagecom.jacktan.struts.action;
34importjava.util.*;
5 importjavax.servlet.http.*;
6 importorg.apache.struts.action.*;
8 importcom.jacktan.struts.formbean.CustomForm
10publicclassCustomActionextendsAction{
12publicActionForwardexecute(ActionMappingp_Mapping,
15ActionFormp_Form,
16HttpServletRequestp_Request,
17HttpServletResponsep_Response)
18throwsException{
21Mapformvalues=((CustomForm)p_Form).getFormvalueMap();
23returnp_Mapping.findForward("Success");
25}
26}

CustomAction類的關鍵行在第21-22行,使用在CustomForm類中定義的getFormvalueMap()方法一次就將表單中所有的提交參數收集完畢,省掉了以前要使用很多getXXX()方法從ActionForm中獲取表單值的做法。

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗