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

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

利用反射簡化Struts的ActionForm的驗證

2019-11-18 12:54:51
字體:
來源:轉載
供稿:網友

  在struts中的actionform中驗證是經常使用的,雖然也可以使用validation來進行驗證,但是在沒有學習validation的時候就只能使用在actionform中驗證啦。
  
  下面是我的一些想法,不知道合不合適,請大家討論一下:^_^
  
  在現在的應用中有很多需要驗證頁面輸入的內容是不是空、是不是數字、是不是Double、是不是Int、是不是Float、是不是Email格式、是不是電話格式、是不是郵政編碼格式等等驗證,在編碼中不得不對每一個屬性進行驗證,這些代碼都重復的。因此,假如將這些驗證的代碼放到一個父類中,那么將會減少編寫的代碼良,同時也能夠很好的對驗證的格式做出一個調整。比如說假如驗證中國的郵政編碼的格式改為驗證其他國家的郵政編碼,只需要修改配置文件中的郵政編碼的正則表達式即可,不用修改代碼。下面是實現的一些分析:
  
  1. 從PRoperties文件中讀取配置文件的類:
  
  將數字、Email、電話和郵政編碼等的格式的正則表達式寫在一個properties文件中,便于修改。其regex .properties文件的內容如下:
  numberRegex ="http://d"
  emailRegex = "http://S+@//S+//.//S+"
  postCodeRegex =" //d//d//d//d//d"
  ………………
  在程序中使用如下代碼進行匹配郵政編碼的格式:
  protected boolean isValidPostalCode(String str){
  try{
  Pattern pattern = Pattern.compile(
  //從properties文件里讀入郵政編碼格式的正則表達式
  PropertyReader.getValueByKey(Constants.POSTAL_CODE));
  //進行匹配,返回結果
  return pattern.matcher(str).matches();
  }catch(Exception e){
  return false;
  }
  }
  
  其他驗證均是如此。此外改方法式protected的方法,可以被子類覆蓋、調用。
  
  2. 其他一些驗證方法:
  
  a) 驗證字符串是否為空的函數:
  
  protected boolean isBlankString(String str){
  if(str == null) {
  return true;
  }
  return (str.length() == 0);
  }
  
  b) 驗證輸入內容式Double類型的函數:
  
  protected boolean isDouble(String str){
  try{
  Double.parseDouble(str);
  return true;
  }catch(Exception e){
  return false;
  }
  }
  其他驗證Float、Int類型的函數同Double類型的函數一樣,沒有什么區別。同樣他們都是protected的函數,可以被子類覆蓋,調用。
  
  3. 覆蓋validate()方法:
  
  public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
  ActionErrors errors = new ActionErrors();
  ActionErrors tempErrors = null;
  //-----------------------------------------------------
  //Validate required!
  ///驗證輸入內容必須輸入的屬性的函數
  //-----------------------------------------------------
  tempErrors = validateRequired();
  if(tempErrors != null){
  errors.add(tempErrors);
  }
  //-----------------------------------------------------
  //Validate postal code!
  //-----------------------------------------------------
  tempErrors = validatePostalCode();
  if(tempErrors != null){
  errors.add(tempErrors);
  }
  //-----------------------------------------------------
  //Validate double!
  //-----------------------------------------------------
  tempErrors = validateDouble();
  if(tempErrors != null){
  errors.add(tempErrors);
  }
  //-----------------------------------------------------
  //Validate phone!
  //-----------------------------------------------------
  tempErrors = validatePhone();
  if(tempErrors != null){
  errors.add(tempErrors);
  }
  //-----------------------------------------------------
  //Validate state!
  //-----------------------------------------------------
  tempErrors = validateState();
  if(tempErrors != null){
  errors.add(tempErrors);
  }
  //-----------------------------------------------------
  //Validate email!
  //-----------------------------------------------------
  tempErrors = validateEmail();
  if(tempErrors != null){
  errors.add(tempErrors);
  }
  ………………………………
  ………………………………
  ………………………………
  ………………………………
  ………………………………
  ………………………………
  
  //-----------------------------------------------------
  //Validate Others
  //可以實現自己與眾不同的驗證,返回一個ActionErrors對象。
  //-----------------------------------------------------
  tempErrors = validateOthers(mapping,request);
  if(tempErrors != null){
  errors.add(tempErrors);
  }
  return errors;
  }
  在該函數里面依次調用驗證不能為空的驗證方法,必須式Email格式等等的驗證函數,最后一個validateOthers()是protected函數,可以被子類覆蓋,在子類中實現上面沒有實現的驗證,然后在將驗證的結果ActionErrors對象返回即可。
  
  4. validateRequired()函數的實現:
  
  /**
  * Validate required!
  *驗證必須輸入的屬性
  * @return ActionErrors
  */
  private ActionErrors validateRequired(){
  //初始化一個ActionErrors對象
  ActionErrors errors = new ActionErrors();
  //讀取需要進行必須驗證的屬性列表
  List properties = getRequiredPropertyList();
  String propertyName = "";
  String propertyValue = "";
  if((properties != null)&&(properties.size()>0)){
  //依次對需要驗證的屬性進行驗證
  for(int i = 0;i<properties.size();i++){
  //獲取屬性名的字符串
  propertyName = (String)properties.get(i);
  //獲取對應屬性的輸入值
  propertyValue = (String)getTheValue(propertyName);
  //驗證屬性值是否為空
  if(this.isBlankString(propertyValue)){
  //在Struts的資源文件中定義出錯提示信息
  //以“屬性名”為“key”將錯誤信息添加到errors中去。
  errors.add(propertyName,new ActionMessage("stocktrack.newuser.required",propertyName));
  }
  }
  }
  //返回結果
  return errors;
  }
  getRequiredPropertyList()是獲取必須驗證屬性列表的函數。該函數的定義如下:
  protected List getRequiredPropertyList(){
  return null;
  }
  可見該函數是一個protected的函數,需要子類覆蓋。在子類中需要將要進行必須驗證的屬性名添加到一個List中去,然后將List返回。下面是一個實現的例子:
  public List getRequiredPropertyList() {
  List list = new ArrayList();
  list.add("username");
  list.add("passWord");
  list.add("email");
  list.add("streetAddress1");
  list.add("streetAddress2");
  list.add("city");
  list.add("state");
  list.add("postalCode");
  list.add("homePhone");
  list.add("workPhone");
  return list;
  }
  這里的屬性名必須與Form類中的屬性名相同。
  
  討論:這里最初的想法是將getRequiredPropertyList()這一類方法定義成為一個抽象(abstract)方法,這樣子類中就必須實現改方法,避免忘記實現。但是在一些Form中也不一定都會要驗證所有的內容,但是程序員也必須實現那些方法,而且他們實現也是返回null即可。假如在BaseForm類中實現了就不用做這種無用的事情了。請給予指正!
  
  —————————————————————————————————
  
  getTheValue(propertyName)方法是用來通過傳進去的屬性名取出該屬性對應的屬性值,下面是改方法的實現:
  private Object getTheValue(String property){
  Object object = null;
  Method method = null;
  Class clazz = null;
  String methodName = "";
  //假如屬性名為空,則返回null
  if(isBlankString(property)){
  return null;
  }
  //將屬性名的第一個字母大寫,然后加上get構成屬性對應的get方法//名。
  //注重:這里的屬性名的第一個字符必須是字母,否則會出錯。(請
  //討論)
  methodName = "get" + property.substring(0,1).toUpperCase()
  + property.substring(1,property.length());
  //從methodsMap(存放方法的一個Map)里面取方法
  method = (Method) methodsMap.get(methodName);
  if(method == null){
  //假如methodsMap中不存在方法名,則通過反射得到方法
  //獲取該類的Class對象
  clazz = getClass();
  try {
  //

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 蜜桃视频最新网址 | 羞羞视频一区 | 久久蜜桃香蕉精品一区二区三区 | 久久福利剧场 | 成人444kkkk在线观看 | 婷婷一区二区三区四区 | 九九热精 | 日韩在线欧美在线 | 午夜天堂在线视频 | 日本网站一区二区三区 | 亚洲第一综合色 | 久久综合给合久久狠狠狠97色69 | 免费毛片在线 | 久久国产精品区 | 爱性久久久久久久 | 久久久久免费电影 | 久久手机在线视频 | 一边吃奶一边插下面 | av电影在线观看网址 | 国产亚洲精品久久久久婷婷瑜伽 | 久久亚洲一区二区三区成人国产 | 国产伦精品一区二区三区 | 视频一区免费观看 | 一级国产免费 | 国产成人高潮免费观看精品 | 99国产精品白浆在线观看免费 | asian裸体佳人pics | 毛片在线免费播放 | 草莓福利视频在线观看 | 毛片免费观看日本中文 | 国产亚洲精品久久久久久久 | 欧美日韩国产一区二区三区在线观看 | 精品国产91久久久久 | 中文字幕在线免费播放 | 成年免费视频黄网站在线观看 | 国产艳妇av视国产精选av一区 | 亚洲成a| 欧美成人精品一区二区 | 一级大黄毛片 | 国产成人精品区 | 久久国产精品久久久久久电车 |