欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Linux 寶庫 - 利用反射簡(jiǎn)化Struts的ActionForm的驗證
 在struts中的actionform中驗證是經(jīng)常使用的,雖然也可以使用validation來(lái)進(jìn)行驗證,但是在沒(méi)有學(xué)習validation的時(shí)候就只能使用在actionform中驗證啦。
  
  下面是我的一些想法,不知道合不合適,請大家討論一下:^_^
  
  在現在的應用中有很多需要驗證頁(yè)面輸入的內容是不是空、是不是數字、是不是Double、是不是Int、是不是Float、是不是Email格式、是不是電話(huà)格式、是不是郵政編碼格式等等驗證,在編碼中不得不對每一個(gè)屬性進(jìn)行驗證,這些代碼都重復的。因此,如果將這些驗證的代碼放到一個(gè)父類(lèi)中,那么將會(huì )減少編寫(xiě)的代碼良,同時(shí)也能夠很好的對驗證的格式做出一個(gè)調整。比如說(shuō)如果驗證中國的郵政編碼的格式改為驗證其他國家的郵政編碼,只需要修改配置文件中的郵政編碼的正則表達式即可,不用修改代碼。下面是實(shí)現的一些分析:
  
  1. 從Properties文件中讀取配置文件的類(lèi):
  
  將數字、Email、電話(huà)和郵政編碼等的格式的正則表達式寫(xiě)在一個(gè)properties文件中,便于修改。其regex .properties文件的內容如下:
  numberRegex ="\\d"
  emailRegex = "\\S+@\\S+\\.\\S+"
  postCodeRegex =" \\d\\d\\d\\d\\d"
  ………………
  在程序中使用如下代碼進(jìn)行匹配郵政編碼的格式:
  protected boolean isValidPostalCode(String str){
  try{
  Pattern pattern = Pattern.compile(
  //從properties文件里讀入郵政編碼格式的正則表達式
  PropertyReader.getValueByKey(Constants.POSTAL_CODE));
  //進(jìn)行匹配,返回結果
  return pattern.matcher(str).matches();
  }catch(Exception e){
  return false;
  }
  }
  
  其他驗證均是如此。此外改方法式protected的方法,可以被子類(lèi)覆蓋、調用。
  
  2. 其他一些驗證方法:
  
  a) 驗證字符串是否為空的函數:
  
  protected boolean isBlankString(String str){
  if(str == null) {
  return true;
  }
  return (str.length() == 0);
  }
  
  b) 驗證輸入內容式Double類(lèi)型的函數:
  
  protected boolean isDouble(String str){
  try{
  Double.parseDouble(str);
  return true;
  }catch(Exception e){
  return false;
  }
  }
  其他驗證Float、Int類(lèi)型的函數同Double類(lèi)型的函數一樣,沒(méi)有什么區別。同樣他們都是protected的函數,可以被子類(lèi)覆蓋,調用。
  
  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
  //可以實(shí)現自己與眾不同的驗證,返回一個(gè)ActionErrors對象。
  //-----------------------------------------------------
  tempErrors = validateOthers(mapping,request);
  if(tempErrors != null){
  errors.add(tempErrors);
  }
  return errors;
  }
  在該函數里面依次調用驗證不能為空的驗證方法,必須式Email格式等等的驗證函數,最后一個(gè)validateOthers()是protected函數,可以被子類(lèi)覆蓋,在子類(lèi)中實(shí)現上面沒(méi)有實(shí)現的驗證,然后在將驗證的結果ActionErrors對象返回即可。
  
  4. validateRequired()函數的實(shí)現:
  
  /**
  * Validate required!
  *驗證必須輸入的屬性
  * @return ActionErrors
  */
  private ActionErrors validateRequired(){
  //初始化一個(gè)ActionErrors對象
  ActionErrors errors = new ActionErrors();
  //讀取需要進(jìn)行必須驗證的屬性列表
  List properties = getRequiredPropertyList();
  String propertyName = "";
  String propertyValue = "";
  if((properties != null)&&(properties.size()>0)){
  //依次對需要驗證的屬性進(jìn)行驗證
  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;
  }
  可見(jiàn)該函數是一個(gè)protected的函數,需要子類(lèi)覆蓋。在子類(lèi)中需要將要進(jìn)行必須驗證的屬性名添加到一個(gè)List中去,然后將List返回。下面是一個(gè)實(shí)現的例子:
  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類(lèi)中的屬性名相同。
  
  討論:這里最初的想法是將getRequiredPropertyList()這一類(lèi)方法定義成為一個(gè)抽象(abstract)方法,這樣子類(lèi)中就必須實(shí)現改方法,避免忘記實(shí)現。但是在一些Form中也不一定都會(huì )要驗證所有的內容,但是程序員也必須實(shí)現那些方法,而且他們實(shí)現也是返回null即可。如果在BaseForm類(lèi)中實(shí)現了就不用做這種無(wú)用的事情了。請給予指正!
  
  ―――――――――――――――――――――――――――――――――
  
  getTheValue(propertyName)方法是用來(lái)通過(guò)傳進(jìn)去的屬性名取出該屬性對應的屬性值,下面是改方法的實(shí)現:
  private Object getTheValue(String property){
  Object object = null;
  Method method = null;
  Class clazz = null;
  String methodName = "";
  //如果屬性名為空,則返回null
  if(isBlankString(property)){
  return null;
  }
  //將屬性名的第一個(gè)字母大寫(xiě),然后加上get構成屬性對應的get方法//名。
  //注意:這里的屬性名的第一個(gè)字符必須是字母,否則會(huì )出錯。(請
  //討論)
  methodName = "get" + property.substring(0,1).toUpperCase()
  + property.substring(1,property.length());
  //從methodsMap(存放方法的一個(gè)Map)里面取方法
  method = (Method) methodsMap.get(methodName);
  if(method == null){
  //如果methodsMap中不存在方法名,則通過(guò)反射得到方法
  //獲取該類(lèi)的Class對象
  clazz = getClass();
  try {
  //
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
jsp設置JavaBean屬性值的動(dòng)作jsp:setProperty
struts原理與實(shí)踐(3)
Struts標簽
Struts標簽(大全)二
Hibernate高級查詢(xún)
flash與client交互
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久