熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

使用ActionForm一次獲取表單的所有參數

2013-11-15 11:40:38  來源: JSP教程 

  用過Jakarta Struts的兄弟都知道ActionForm的使用方法和她在Struts框架中所起的作用但是您是否在為要給ActionForm編寫一大堆setter和getter方法而感到厭倦和疲憊呢?的確我是厭倦了所以我要尋求新的方法我第一反映就是想使用Map接口將所有的表單參數全部放進HashMap中然後在Action中get出這個Map並進行業務邏輯的操作有了想法當然要去試驗了實踐才是檢驗真理的唯一標准
  首先要編寫一個擴展ActionForm的類代碼如下(由於篇幅我只列出了代碼的關鍵部分):
  
    package comjacktanstrutsformbean;
    import javautil*;
    import javaxservlethttp*;
     import orgapachestrutsaction*;
     public class CustomForm extends ActionForm {
     private Map formvalueMap = new HashMap();
     public void setFormvalueMap(Map p_FormvalueMap){
      thisformvalueMap = p_FormvalueMap;
     }
     public Map getFormvalueMap(){
       return thisformvalueMap;
     }
     public void setFormvalue(String keyObject value){
      formvalueMapput(keyvalue);
    }
    public Object getFormvalue(String key){
      return formvalueMapget(key);
    }
    }
  
  下面對上面的代碼一一做解釋
  第行定義了一個HashMap類的實例變量這個Map用於存放表單遞交上來的參數值作為鍵值對存在
  第行的setFormvalueMap()方法用於設置實例變量formvalueMap;
  第行的getFormvalueMap()方法用於獲取實例變量formvalueMap這個方法將在Action類中調用替代了以前在Action類中調用大量的(CustomForm)formgetXXX()方法
  第行是關鍵的方法setFormvalue()這個方法就是取代以前在ActionForm中大量的setXXX()方法用於接受表單傳遞上來的輸入值注意這個方法的參數key是一個String類型的用作Map的keyvalue是Object類型的這個參數就是表示表單傳送過來的各個輸入值
  第行是getFormvalue()方法用於從Map中根據key返回一個value對象
  
  好了ActionForm的任務完成了不過離目標還有好大一段距離目前只完成了三分之一的工作我們繼續干!
  
  有了ActionForm接下來就是要編寫Action類了代碼如下(由於篇幅我只列出了代碼的關鍵部分)
  
    package comjacktanstrutsaction;
    import javautil*;
    import javaxservlethttp*;
     import orgapachestrutsaction*;
     import comjacktanstrutsformbeanCustomForm
    public class CustomAction extends Action {
     public ActionForward execute(
                ActionMapping p_Mapping
                ActionForm p_Form
                HttpServletRequest p_Request
     HttpServletResponse p_Response)
      throws Exception{
       Map formvalues =
          ((CustomForm)p_Form)getFormvalueMap();
       return p_MappingfindForward(Success);
     }
    }
  
  CustomAction類的關鍵行在第使用在CustomForm類中定義的 getFormvalueMap()方法一次就將表單中所有的提交參數收集完畢省掉了以前要使用很多getXXX()方法從ActionForm中獲取表單值的做法
  好了接下來是要編寫JSP頁面了因為我們的ActionForm使用特殊的方法接受參數值所以在寫表單頁面的時候也要使用特殊的簽名代碼如下
  
  <html:form action=login><table width=% border=>
    <tr>
     <td width=%>
   </td>
     <td width=%>
   </td><td width=% rowspan= valign=top><html:errors/></td>
    </tr>
    <tr>
     <td>
   </td>
     <td height=>用戶名</td>
    </tr>
    <tr>
     <td> </td><td height=><html:text property=formvalue(username) size= maxlength=/></td>
    </tr>
    <tr>
     <td>
   </td>
     <td height=>密碼</td>
    </tr>
   <tr>
    <td>
   </td><td height=><html:password property=formvalue(password) size= maxlength= redisplay=false/></td>
    </tr>
    <tr>
     <td> </td><td height=><html:submit value=登錄/> <html:button property=close value=關閉 onclick=Close()/></td>
    </tr></table>
  
  上面是一個用戶登錄的界面注意紅色的部分這個簽名要和CustomForm類中的setFormvalue()簽名保持一致注意大小寫Struts會利用Java的反射機制尋找到合適的方法調用formvalue(username)圓括號中的字符串可以是表示該輸入域在數據庫中字段的映射也可以是自己自定義的字符串這個字符串將作為Map的key保存
  好了終於要完成了最後要做的就是設置struts的配置文件了打開strutsconfigxml文件
  
  在<formbeans>段輸入以下代碼
  
  <formbeans>
  <formbean
  name=CustomForm
  type=comjacktanstrutsformbeanCustomForm/>
  </formbeans>
  
  在<actionmappings>段輸入以下代碼
  
  <action
  path=/login
  type=comjacktanstrutsactionCustomAction
  name=addDeviceForm
  scope=request>
  <forward name=login path=mainjsp/>
  </action>
  
  大功告成所有的任務都完成了為了檢測是否可以正確運行我在Action類中加入如下測試代碼:
  
    Set set = formvaluesentrySet();
    Iterator it = erator();
    while( ithasNext() ){
      MapEntry me = (MapEntry)itnext();
      Systemoutprintln((String)megetKey);
   Systemoutprintln((String)megetvalue);
    }
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19425.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.