亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

利用反射簡化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 {
  //

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲免费精彩视频| 国产在线一区二区三区| 亚洲人午夜精品| 91精品国产高清久久久久久| 亚洲欧美日韩综合| 成人福利网站在线观看| 亚洲久久久久久久久久| 国产视频精品免费播放| 91美女片黄在线观| 亚洲精品www久久久久久广东| 8x海外华人永久免费日韩内陆视频| 国产精品久久久久免费a∨| 91视频国产高清| 亚洲综合最新在线| 国产精品高潮呻吟久久av无限| 在线国产精品视频| 欧美成人在线免费视频| 美日韩精品免费视频| 日韩成人av一区| 一个人看的www欧美| 奇米四色中文综合久久| 国外成人性视频| 欧美在线观看日本一区| 欧洲午夜精品久久久| 精品视频偷偷看在线观看| 夜夜嗨av一区二区三区四区| www亚洲精品| 欧美一级淫片播放口| 在线亚洲国产精品网| 另类美女黄大片| 91在线观看免费网站| 成人中文字幕在线观看| 精品中文字幕在线2019| 成人福利网站在线观看| 国产午夜精品一区二区三区| 中文字幕精品www乱入免费视频| 欧美俄罗斯乱妇| 日韩在线观看av| 中文字幕久热精品在线视频| 成人在线免费观看视视频| 欧美日韩国产丝袜美女| 精品久久久久久亚洲精品| 欧美性高潮在线| 深夜福利91大全| 亚洲精品免费在线视频| 亚洲区一区二区| 大伊人狠狠躁夜夜躁av一区| 久久久久久久久久久人体| 亚洲欧美中文日韩在线| 91av在线免费观看视频| 国产做受69高潮| 69久久夜色精品国产69| 91久久久久久久久久久久久| 亚洲人成在线观看网站高清| 成人中心免费视频| 91最新在线免费观看| 中文字幕精品在线视频| 日本韩国欧美精品大片卡二| 精品二区三区线观看| 国产日韩精品一区二区| 久久国产天堂福利天堂| 日韩在线观看免费全集电视剧网站| 91久久久久久久久久| 理论片在线不卡免费观看| 欧美日韩日本国产| 国产精品美女www爽爽爽视频| 久久久亚洲欧洲日产国码aⅴ| 成人写真视频福利网| 国产视频精品xxxx| 国产999在线观看| 亚洲a级在线观看| 国产又爽又黄的激情精品视频| 久久91亚洲精品中文字幕| 亚洲欧洲日本专区| 美女国内精品自产拍在线播放| 欧美在线亚洲一区| 亚洲欧美日韩中文在线制服| 国产精品丝袜视频| 国产精品伦子伦免费视频| 91在线免费网站| 91精品国产综合久久香蕉| 国产欧美日韩中文字幕| 91超碰caoporn97人人| 久久久免费在线观看| 黑人巨大精品欧美一区免费视频| www.久久色.com| 国产精品美女av| 亚洲少妇中文在线| 2019日本中文字幕| 亚洲一区二区久久久| 欧美日韩国产二区| 懂色aⅴ精品一区二区三区蜜月| 国产精品aaa| 国产精品久久久久久久久久尿| 91系列在线播放| 精品在线观看国产| 国产精品一久久香蕉国产线看观看| 精品欧美aⅴ在线网站| 日产日韩在线亚洲欧美| 亚洲精品一区av在线播放| 亚洲激情第一页| 国产综合福利在线| 欧美日韩国产精品专区| 亚洲精品不卡在线| 国产精品aaaa| 日韩有码在线观看| 国产精品福利无圣光在线一区| 国产成人福利夜色影视| 亚洲japanese制服美女| 国产精品∨欧美精品v日韩精品| 黑人精品xxx一区一二区| 欧美午夜性色大片在线观看| 欧美日韩国产成人| 欧美精品国产精品日韩精品| 国产精品成人aaaaa网站| 日韩成人激情视频| 国模极品一区二区三区| 亚洲综合在线小说| 尤物yw午夜国产精品视频| 日韩欧美大尺度| 国产一级揄自揄精品视频| 亚洲人精品午夜在线观看| 国产xxx69麻豆国语对白| 亚洲成人精品av| 黑人巨大精品欧美一区二区免费| 成人激情黄色网| 超碰精品一区二区三区乱码| 日韩在线观看免费高清| 国产日产亚洲精品| 亚洲片在线观看| 亚洲视频axxx| 在线日韩精品视频| 国产在线不卡精品| 日韩精品中文字幕在线观看| 136fldh精品导航福利| 欧美性感美女h网站在线观看免费| 久久免费精品日本久久中文字幕| 555www成人网| 成人av在线网址| 91精品啪在线观看麻豆免费| 欧美成人午夜影院| 国产亚洲欧美aaaa| 欧美高清视频在线播放| 中文字幕欧美日韩精品| 久久视频在线看| 精品国产91久久久| 激情久久av一区av二区av三区| 久久理论片午夜琪琪电影网| 国产日本欧美在线观看| 亚洲精品日韩av| 欧美福利小视频| 5566成人精品视频免费| 国产一区二区三区在线看| 久久久久久久久中文字幕| 亚洲深夜福利网站| 亚洲男人天堂九九视频| 国产成人一区二区在线| 亚洲自拍偷拍色片视频| 国产精品美女久久久免费| 亚洲自拍偷拍第一页| 欧美日韩免费区域视频在线观看| 亚洲精品国产欧美| 国产精品www色诱视频| 日本一区二区在线播放|