国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

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

2019-11-18 13:15:56
字體:
來源:轉載
供稿:網友

  用過Jakarta Struts的兄弟都知道ActionForm的使用方法和她在Struts框架中所起的作用,但是您是否在為要給ActionForm編寫一大堆setter和getter方法而感到厭倦和疲憊呢?的確,我是厭倦了,所以我要尋求新的方法。我第一反映就是想使用Map接口,將所有的表單參數全部放進HashMap中,然后在Action中get出這個Map,并進行業務邏輯的操作。有了想法當然要去試驗了,實踐才是檢驗真理的唯一標準。
  首先要編寫一個擴展ActionForm的類。代碼如下(由于篇幅,我只列出了代碼的要害部分):
  
  12  package com.jacktan.struts.formbean;
  34  import java.util.*;
  5  import javax.servlet.http.*;
  6 7  import org.apache.struts.action.*;
  8 9  public class CustomForm extends ActionForm {
  1011   PRivate Map formvalueMap = new HashMap();
  1213   public void setFormvalueMap(Map p_FormvalueMap){
  14    this.formvalueMap = p_FormvalueMap;
  15   }
  1617   public Map getFormvalueMap(){
  18     return this.formvalueMap;
  19   }
  2021   public void setFormvalue(String key,Object value){
  22    formvalueMap.put(key,value);
  23  }
  2425  public Object getFormvalue(String key){
  26    return formvalueMap.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類了,代碼如下(由于篇幅,我只列出了代碼的要害部分):
  
  12  package com.jacktan.struts.action;
  34  import java.util.*;
  5  import javax.servlet.http.*;
  6 7  import org.apache.struts.action.*;
  8 9  import com.jacktan.struts.formbean.CustomForm
  10 11 public class CustomAction extends Action {
  1213   public ActionForward execute(
  14              ActionMapping p_Mapping,
  15              ActionForm p_Form,
  16              HttpServletRequest p_Request,
  17   HttpServletResponse p_Response)
  18    throws Exception{
  192021     Map formvalues =
  22        ((CustomForm)p_Form).getFormvalueMap();
  2324     return p_Mapping.findForward("SUCcess");
  25   }
  26  }
  
  CustomAction類的要害行在第21-22行,使用在CustomForm類中定義的 getFormvalueMap()方法一次就將表單中所有的提交參數收集完畢,省掉了以前要使用很多getXXX()方法從ActionForm中獲取表單值的做法。
  好了,接下來是要編寫jsp頁面了,因為我們的ActionForm使用非凡的方法接受參數值,所以在寫表單頁面的時候也要使用非凡的簽名。代碼如下:
  
  <Html:form action="login"><table width="100%" border="0">
    <tr>
     <td width="3%">
   </td>
     <td width="31%">
   </td><td width="66%" rowspan="6" valign="top"><html:errors/></td>
    </tr>
    <tr>
     <td>
   </td>
     <td height="25">用戶名</td>
    </tr>
    <tr>
     <td> </td><td height="25"><html:text property="formvalue(username)" size="12" maxlength="12"/></td>
    </tr>
    <tr>
     <td>
   </td>
     <td height="25">密碼</td>
    </tr>
   <tr>
    <td>
   </td><td height="25"><html:passWord property="formvalue(password)" size="12" maxlength="12" redisplay="false"/></td>
    </tr>
    <tr>
     <td> </td><td height="25"><html:submit value="登錄"/> <html:button property="close" value="關閉" onclick="Close()"/></td>
    </tr></table>
  
  上面是一個用戶登錄的界面,注重紅色的部分,這個簽名要和CustomForm類中的setFormvalue()簽名保持一致,注重大小寫,Struts會利用Java的反射機制尋找到合適的方法調用。formvalue(username)圓括號中的字符串可以是表示該輸入域在數據庫中字段的映射,也可以是自己自定義的字符串,這個字符串將作為Map的key保存。
  好了,終于要完成了,最后要做的就是設置struts的配置文件了,打開struts-config.xml文件,
  
  在<form-beans>段輸入以下代碼:
  
  <form-beans>
  <form-bean
  name="CustomForm"
  type="com.jacktan.struts.formbean.CustomForm"/>
  </form-beans>
  
  在<action-mappings>段輸入以下代碼:
  
  <action
  path="/login"
  type="com.jacktan.struts.action.CustomAction"
  name="addDeviceForm"
  scope="request">
  <forward name="login" path="main.jsp"/>
  </action>
  
  大功告成,所有的任務都完成了。為了檢測是否可以正確運行,我在Action類中加入如下測試代碼:
  
  1  Set set = formvalues.entrySet();
  2  Iterator it = set.iterator();
  3  while( it.hasNext() ){
  4    Map.Entry me = (Map.Entry)it.next();
  5    System.out.println((String)me.getKey);
  6 System.out.println((String)me.getvalue);
  7  }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 太谷县| 綦江县| 平谷区| 玉田县| 沾益县| 嘉定区| 道真| 淮北市| 卓尼县| 襄汾县| 绥化市| 万宁市| 冕宁县| 湾仔区| 桑日县| 民乐县| 唐海县| 锡林郭勒盟| 舞阳县| 霞浦县| 灵武市| 原阳县| 安化县| 宁夏| 容城县| 和静县| 安远县| 丘北县| 盐城市| 突泉县| 炎陵县| 长岛县| 南漳县| 榆社县| 荔波县| 宜兴市| 溆浦县| 定安县| 洛川县| 永济市| 新河县|