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

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

Struts源代碼閱讀(Commons-Validator)

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

  Commons-Validator(一)
  
  Commons-Validator包用來把驗證規則程序提取出來,以供重復使用。這個包可以使用在Struts中,也可以獨立的應用在任何其它的應用中。用戶可以通過java類的方式自定義驗證方法,也可以在配置文件中通過正則表達式配置驗證方法。它不但支持服務器端的驗證,客戶端的驗證也支持,具體需要使用tag把相應的js方法寫入相應的頁面中。
  
  一、綜述:
  
  整個Validator框架可以有若干個FormSet,而每個FormSet又可以有若干個Form,每個Form中可以有若干個Field。FormSet的PRocess(...)方法,逐個調用其中的Form的process(...)方法,而Form的process(...)方法又是逐個調用Field的process(...)方法。Validator類作為驗證的起始點,調用與其一一對應的Form的validate(...)方法,而Form的validate(...)方法又是逐個調用其中Field的validate(...)方法實現的。
  
  二、配置文件說明:
  
  <form-validation>
  <global>
  <constant>
  <constant-name>驗證方法的標志名</constant-name>
  <constant-value>正則表達式</constant-value>
  </constant>
  <validator name="這個驗證方法的標志名,供下面的depends調用"
  classname="這個驗證方法在哪個類中,為類全名"
  method="驗證方法的名稱"
  methodParams="這個驗證方法需要的參數類型,依次以逗號格開,為類全名"
  depends="基于什么驗證之上,可以為多個值,以逗號格開,值為方法的標志名"
  jsFunction="js的方法全名,格式為文件路徑.方法名。文件路徑以點隔開,
  假如不填,默認為org.apache.commons.validator.javascr  msg="對應于properties文件中的一條,作為不通過驗證時返回的信息"/>
  </global>
  <formset language="語言" country="城市" variant="方言?">
  <constant>
  <constant-name>驗證方法的標志名</constant-name>
  <constant-value>正則表達式</constant-value>
  </constant>
  <form name="bean 對象名稱">
  <field property="bean中的屬性名" depends="需要什么樣的驗證,可以為多個值,以逗號格開,值為方法的標志名">
  <arg name = "變量名" key = "properties文件的key,或者來自Var的name" resource = "是/否來自資源文件"/>
  <var>
  <var-name>變量名</var-name>
  <var-value>變量值</var-value>
  </var>
  </field>
  </form>
  </formset>
  </form-validation>
  
  Commons-Validator(二)
  
  在Validator的配置文件中,一共有如下幾個基本元素。
  
  一、org.apache.commons.validator.Var
  
  它的作用是為配置文件(validator.
xml)中的其它標簽提供可取用的變量,為Field提供執行驗證所需要的其它參數值,比如最大長度。這個類有如下屬性:name,變量的名稱;value,變量的值;jsType,當要自動生成js的時候,js的類型。
  
  二、org.apache.commons.validator.Arg
  
  它的作用是替換信息中的某一部分,或者為驗證方法提供必需的參數值。這個類有如下屬性:bundle,資源文件名,用來存放所需要的信息。key,表示Arg的key或者value。name,表示Arg的名稱。position,這個Arg中的值用來替換信息中的哪一部分,需要替換的部分以{n}標志。resource:key所指定的信息是否來自外部的資源文件,默認為true;假如為true,則代表key為buddle屬性所指定的資源文件中的key。
  
  三、org.apache.commons.validator.Msg
  
  它的作用是在驗證不通過時,應該返回什么的信息。這個類有如下屬性:bundle,資源文件名,用來存放所需要的信息。key,表示Msg的key或者value。name,表示Msg的名稱。resource:key所指定的信息是否來自外部的資源文件,默認為true;假如為true,則代表key為buddle屬性所指定的資源文件中的key。
  
  四、org.apache.commons.validator.FormSet
  
  這個類治理通過一個Map所有要檢驗的Form對象,key為Form的name;同時通過一個Map治理在<formset/>中定義的Constant,key為<constant-name>。同時其內部有language,country, variant這幾個屬性,用來實現國際化。一個配置文件可以有多個FormSet,這些FormSet的區別是要求不同的本地化。
  
  五、org.apache.commons.validator.Form
  
  這個類有如下屬性:name,這個form的名稱。lFields,一個保存所有Field的List。hFields,一個保存所有Field的FastHashMap,這個FastHashMap的key值是對應Field的key屬性(對應配置文件中的property)。這個類通過validate(...)方法用來對這個Form中的所有位置低于page的Field進行驗證。它實際是在一個循環中逐個調用每個field的validate(...)方法,然后把結果保存在一個ValidatorResults對象中。
  
  六、org.apache.commons.validator.Field
  
  這個類有如下屬性:depends,依靠于什么驗證規則。dependencyList保存了以逗號為分隔符把depends分割生成的list。page,假如是多步提交的話當前是第幾步,值等于或小于表單中page性質的值,JavaBean 才會得到處理;args,是一個數組;這個數組的元素為HashMap,每個HashMap在數組的位置就是其中的Arg中的position屬性的值;HashMap中的key值為Arg的name,假如這個name為null則為默認的值:DEFAULT_ARG(org.apache.commons.validator.Field.DEFAULT),value為Arg對象。hVars,是一個FastHashMap,用來治理所有的Var對象,key為Var的name,值為Var對象。getIndexedListProperty表明這個property為JavaBean中的一個數組元素的index。
  
  1、process(Map globalConstants, Map constants)
  
  這個方法用來執行配置文件中變量的替換。它的兩個參數分別為在<global/>和<formset/>中定義的constant。在這個Map中,key為<constant/>標簽中的constant-name,value為<constant-value>。在配置文件中,可以實現如下的變量使用方式:Form的property屬性,Var中的value屬性,Arg中的key屬性,Msg的key屬性,他們均可以通過{constant-name}的方式,引用在<global/>或者<formset/>標簽中定義的constant。Arg中的key屬性,可以通過{Var:var-name}的方式引用在<var/>中定義的Var。
  
  FormSet中的process(...)方法依次調用其中的Form的process(...)方法,而Form的process(...)方法又依次調用其中的Field的process(...)方法。
  
  2、validate(Map params, Map actions)
  
  執行驗證,其中actions保存了所有的ValidatorAction對象。它首先會從params取出key為Validator.BEAN_PARAM(java.lang.Object)的值作為要驗證的JavaBean。然后通過generateKey()方法判定當前要驗證的Field是否是IndexedList。假如是,則需要分別對這個List中的各個元素進行驗證;否則直接執行對與JavaBean的特定屬性(property)執行驗證。
  
  3、validateForRule(...)
  
  接受要執行的ValidatorAction對象的同時,還是會接受Map actions參數,這是因為這個要執行的ValidatorAction可能會依靠于其它的ValidatorAction。它會先查找以前的驗證結果,假如以前沒有執行過這個驗證,那么執行runDependentValidators(...)方法,執行它所依靠于的ValidatorAction;假如通過,那么再對要執行的ValidatorAction,執行驗證。
  
  Commons-Validator(三)
  
  在Validator包中提供了一些Util類,同時提供了對基本數據類型,時間,E-mail,信用卡等格式的驗證方法。
  
  一、org.apache.commons.validator.util.Flags
  
  這個類用來治理一系列的Flag,其中的每個Flag的值都是2的N次方。然后每個Flag之間位與(&)就得到了整個Flags的值。
  
  二、org.apache.commons.validator.util.ValidatorUtils
  
  這個類為Validator提供一些Utility的操作,共有三個方法。
  
  1、replace(...)
  
  這個方法用來將一個字符串中某個特性的字符串替換為另一個字符串,注重這是一個全局替換方法。
  
  2、getValueAsString(...)
  
  這個方法用來獲取某個Bean中的一個特定的屬性,然后把屬性值轉換為字符串返回。注重,String[]和Collection類型的值,假如里面不包含任何值,則直接返回""。
  
  3、copyFastHashMap(...)
  
  很顯然的是對一個特定的FashHashMap執行copy。這里要注重的是,假如value為Msg,Arg,Var類型的時候需要執行clone,然后再保存。
  
  三、org.apache.commons.validator.ValidatorUtil
  
  這個類完全通過調用上面的ValidatorUtils方法,實現自己的同名方法。只是多了一個getDelimitedRegEXP(...)方法,用來生成一個正則表達式。
  
  四、org.apache.commons.validator.DateValidator
  
  實現了單例模式。這個類用來檢查日期類型是否合法,日期的類型要通過參數傳遞給這個Validator。同時還有一個strict屬性,表示時候檢查過渡匹配所要求的日期格式。這個日期檢查就是通過formatter.parse(value)方法檢查時候有異常拋出。
  
  五、org.apache.commons.validator.EmailValidator
  
  實現了單例模式。這個類用來檢查Email類型是否合法。它通過正則表達式實現驗證。
  
  六、org.apache.commons.validator.GenericTyp

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品日韩丝袜精品| 羞羞色国产精品| 国产精品18久久久久久首页狼| 一区二区三区在线播放欧美| 亚洲经典中文字幕| 亚洲欧美日韩中文在线制服| 欧美一级片一区| 亚洲人成在线免费观看| 亚洲精品不卡在线| 国产专区欧美专区| 久久久久久久影院| 超碰日本道色综合久久综合| 国产精品一区二区女厕厕| 亚洲精品女av网站| 午夜精品久久久99热福利| 亚洲午夜国产成人av电影男同| 正在播放欧美视频| 国产亚洲美女精品久久久| 日本久久久a级免费| 亚洲午夜精品久久久久久性色| 国产精品永久免费| 两个人的视频www国产精品| 97精品伊人久久久大香线蕉| 亚洲精品福利在线观看| 亚洲一区二区三区视频播放| 国产一区二区丝袜| 久久久久久久国产| 欧美电影在线观看网站| 久久精品电影网| 欧美小视频在线| 国产欧美一区二区三区久久人妖| 欧美富婆性猛交| 69av成年福利视频| 国产日韩中文字幕| 隔壁老王国产在线精品| 欧美国产亚洲精品久久久8v| 最近2019中文字幕大全第二页| 久久精品国产一区| 热99久久精品| 亚洲第一综合天堂另类专| 国产精品久久久久久久久久99| 欧美在线性视频| 国产va免费精品高清在线观看| 欧美大全免费观看电视剧大泉洋| 川上优av一区二区线观看| 国产成人精品亚洲精品| 亚洲国产欧美一区二区三区同亚洲| 久久久999国产精品| 国产日产欧美a一级在线| 91性高湖久久久久久久久_久久99| 高清欧美一区二区三区| 成人a免费视频| 中文字幕欧美日韩在线| 久久色免费在线视频| 欧美激情a在线| 国产精品久久久久一区二区| 中文日韩在线观看| 成人在线视频福利| zzjj国产精品一区二区| 国产91热爆ts人妖在线| 国产91精品不卡视频| 91免费观看网站| 国产精品丝袜久久久久久不卡| 欧美一级高清免费播放| 日韩精品视频在线免费观看| 青青草原成人在线视频| 国产精自产拍久久久久久蜜| 91欧美日韩一区| 亚洲网站视频福利| 亚洲欧洲激情在线| 国产精自产拍久久久久久| 久久中文字幕国产| 久久久久久美女| 亚洲国产成人爱av在线播放| 国产欧美日韩精品丝袜高跟鞋| 国产精品一区久久久| 亚洲第一区中文字幕| 国产精品网站视频| 亚洲成成品网站| 欧美肥臀大乳一区二区免费视频| 久久久久久久999精品视频| 91久久在线视频| 久久69精品久久久久久久电影好| 国产欧美日韩精品在线观看| 正在播放欧美一区| 精品福利在线视频| 欧美资源在线观看| 欧美午夜激情小视频| 久久夜精品va视频免费观看| 美女福利精品视频| 欧美视频国产精品| 亚洲国产精品悠悠久久琪琪| 97在线视频免费播放| 国产精品91免费在线| 精品久久国产精品| 久热精品视频在线观看| 欧美亚洲激情视频| 亚洲午夜未满十八勿入免费观看全集| 国产区精品在线观看| 亚洲福利在线观看| 亚洲激情自拍图| 欧美成人一区二区三区电影| 国语自产偷拍精品视频偷| 欧美精品一区二区三区国产精品| 精品亚洲一区二区三区| 日韩女在线观看| 中文字幕亚洲综合| 国产精品678| 91久久国产精品| 欧美性猛交xxxx乱大交极品| 91成人国产在线观看| 亚洲成av人乱码色午夜| 成人午夜高潮视频| 日韩精品在线视频美女| 国产精品免费视频久久久| 亚洲成avwww人| 国产中文日韩欧美| 欧美激情第6页| 国产91ⅴ在线精品免费观看| 高清视频欧美一级| 日韩av综合网| 日韩精品中文字幕在线播放| 亚洲码在线观看| 亚洲第一色中文字幕| 国产va免费精品高清在线| 国产精品一二三视频| 国产精品久久久久久久电影| 日韩在线视频线视频免费网站| 免费不卡欧美自拍视频| 国产精品69久久| 欧美精品videossex88| 国产99在线|中文| 中文一区二区视频| 日韩精品在线免费| 国产精品永久免费观看| 久久久久久久久久国产精品| 欧美插天视频在线播放| 欧美日韩ab片| www.日韩视频| 伊人久久精品视频| 国产亚洲福利一区| 欧美激情视频一区二区| 亚洲女性裸体视频| 美女999久久久精品视频| 97成人超碰免| 亚洲免费视频网站| 国产精品一区二区av影院萌芽| 欧美成年人视频网站| 最近2019中文字幕在线高清| 一区二区三区视频在线| 久久久久久久久久久免费| 欧美日韩国产二区| 亚洲最大的网站| 欧美一级片一区| 亚洲三级 欧美三级| 色中色综合影院手机版在线观看| 国产精品一区专区欧美日韩| 精品国产电影一区| 亚洲在线视频福利| 成人亚洲综合色就1024| 欧美亚洲视频在线观看| 欧美精品在线免费| 久久久久久成人| 国产精品久久久久久搜索|