麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

使用ActionForm一次獲取表單的所有參數(shù)

2019-11-18 13:15:56
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  用過(guò)Jakarta Struts的兄弟都知道ActionForm的使用方法和她在Struts框架中所起的作用,但是您是否在為要給ActionForm編寫(xiě)一大堆setter和getter方法而感到厭倦和疲憊呢?的確,我是厭倦了,所以我要尋求新的方法。我第一反映就是想使用Map接口,將所有的表單參數(shù)全部放進(jìn)HashMap中,然后在Action中g(shù)et出這個(gè)Map,并進(jìn)行業(yè)務(wù)邏輯的操作。有了想法當(dāng)然要去試驗(yàn)了,實(shí)踐才是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)。
  首先要編寫(xiě)一個(gè)擴(kuò)展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  }
  
  下面對(duì)上面的代碼一一做解釋:
  第11行定義了一個(gè)HashMap類的實(shí)例變量,這個(gè)Map用于存放表單遞交上來(lái)的參數(shù)值,作為鍵值對(duì)存在;
  第13行的setFormvalueMap()方法用于設(shè)置實(shí)例變量formvalueMap;
  第17行的getFormvalueMap()方法用于獲取實(shí)例變量formvalueMap,這個(gè)方法將在Action類中調(diào)用,替代了以前在Action類中調(diào)用大量的(CustomForm)form.getXXX()方法;
  第21行是要害的方法,setFormvalue()這個(gè)方法就是取代以前在ActionForm中大量的setXXX()方法,用于接受表單傳遞上來(lái)的輸入值。注重這個(gè)方法的參數(shù),key是一個(gè)String類型的,用作Map的key,value是Object類型的,這個(gè)參數(shù)就是表示表單傳送過(guò)來(lái)的各個(gè)輸入值。
  第25行是getFormvalue()方法,用于從Map中根據(jù)key返回一個(gè)value對(duì)象。
  
  好了,ActionForm的任務(wù)完成了,不過(guò)離目標(biāo)還有好大一段距離,目前只完成了三分之一的工作。我們繼續(xù)干!
  
  有了ActionForm接下來(lái)就是要編寫(xiě)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()方法一次就將表單中所有的提交參數(shù)收集完畢,省掉了以前要使用很多getXXX()方法從ActionForm中獲取表單值的做法。
  好了,接下來(lái)是要編寫(xiě)jsp頁(yè)面了,因?yàn)槲覀兊腁ctionForm使用非凡的方法接受參數(shù)值,所以在寫(xiě)表單頁(yè)面的時(shí)候也要使用非凡的簽名。代碼如下:
  
  <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="關(guān)閉" onclick="Close()"/></td>
    </tr></table>
  
  上面是一個(gè)用戶登錄的界面,注重紅色的部分,這個(gè)簽名要和CustomForm類中的setFormvalue()簽名保持一致,注重大小寫(xiě),Struts會(huì)利用Java的反射機(jī)制尋找到合適的方法調(diào)用。formvalue(username)圓括號(hào)中的字符串可以是表示該輸入域在數(shù)據(jù)庫(kù)中字段的映射,也可以是自己自定義的字符串,這個(gè)字符串將作為Map的key保存。
  好了,終于要完成了,最后要做的就是設(shè)置struts的配置文件了,打開(kāi)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>
  
  大功告成,所有的任務(wù)都完成了。為了檢測(cè)是否可以正確運(yùn)行,我在Action類中加入如下測(cè)試代碼:
  
  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  }

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 黄色av.com | 国产大片中文字幕在线观看 | 午夜视频你懂的 | 精品国产一区二区三区四区阿崩 | 国产精品视频免费在线观看 | 在线成人一区二区 | 国产在线一区二区三区 | 97zyz成人免费视频 | www.91sp| 日本xxxx色视频在线观看免费, | 深夜精品福利 | 久久久国产精品免费观看 | 黄色av网站免费 | chinese 军人 gay xx 呻吟 | 国产a级久久 | 娇喘视频在线观看 | 日韩激情 | 粉嫩粉嫩一区二区三区在线播放 | chengrenyingshi| 国产资源在线视频 | 亚洲精品一区二区三区大胸 | h色视频在线观看 | 久久美女色视频 | 亚洲成人精品区 | 特级无码毛片免费视频尤物 | 天天色宗合 | 国产精品呻吟 | 色综合欧美| 欧美一级片一区 | 欧美黄色一级片视频 | 九九热在线视频观看 | 深夜视频福利 | 泰剧19禁啪啪无遮挡大尺度 | 久久99精品国产99久久6男男 | 孕妇体内谢精满日本电影 | 91短视频在线视频 | 午夜噜噜噜| 日韩欧美综合在线 | 亚洲婷婷日日综合婷婷噜噜噜 | 91福利在线观看 | 99精品国产一区二区三区 |