用ActionForm一次獲取表單所有參數
用過Jakarta Struts的兄弟都知道ActionForm的使用方法和她在Struts框架中所起的作用,但是您是否在為要給ActionForm編寫一大堆setter和getter方法而感到厭倦和疲憊呢?的確,我是厭倦了,所以我要尋求新的方法。我第一反映就是想使用Map接口,將所有的表單參數全部放進HashMap中,然后在Action中get出這個Map,并進行業務邏輯的操作。有了想法當然要去試驗了,實踐才是檢驗真理的唯一標準。
首先要編寫一個擴展ActionForm的類。代碼如下(由于篇幅,我只列出了代碼的關鍵部分):
下面對上面的代碼一一做解釋:
第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類了,代碼如下(由于篇幅,我只列出了代碼的關鍵部分):
CustomAction類的關鍵行在第21-22行,使用在CustomForm類中定義的getFormvalueMap()方法一次就將表單中所有的提交參數收集完畢,省掉了以前要使用很多getXXX()方法從ActionForm中獲取表單值的做法。
首先要編寫一個擴展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中獲取表單值的做法。