国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Struts源代碼閱讀(Commons-Validator) - [Matrix - 與 Java 共舞]
原文地址:
http://www.matrix.org.cn/resource/article/43/43759_Struts.html
關(guān)鍵字:Struts;Commons-Validator



Commons-Validator(一)

    Commons-Validator包用來把驗(yàn)證規(guī)則程序提取出來,以供重復(fù)使用。這個(gè)包可以使用在Struts中,也可以獨(dú)立的應(yīng)用在任何其它的應(yīng)用中。用戶可以通過java類的方式自定義驗(yàn)證方法,也可以在配置文件中通過正則表達(dá)式配置驗(yàn)證方法。它不但支持服務(wù)器端的驗(yàn)證,客戶端的驗(yàn)證也支持,具體需要使用tag把相應(yīng)的js方法寫入相應(yīng)的頁面中。

一、綜述:
    整個(gè)Validator框架可以有若干個(gè)FormSet,而每個(gè)FormSet又可以有若干個(gè)Form,每個(gè)Form中可以有若干個(gè)Field。FormSet的process(...)方法,逐個(gè)調(diào)用其中的Form的process(...)方法,而Form的process(...)方法又是逐個(gè)調(diào)用Field的process(...)方法。Validator類作為驗(yàn)證的起始點(diǎn),調(diào)用與其一一對應(yīng)的Form的validate(...)方法,而Form的validate(...)方法又是逐個(gè)調(diào)用其中Field的validate(...)方法實(shí)現(xiàn)的。

二、配置文件說明:

<form-validation>
   <global>
      <constant>
        <constant-name>驗(yàn)證方法的標(biāo)志名</constant-name>
        <constant-value>正則表達(dá)式</constant-value>
      </constant>
      <validator name="這個(gè)驗(yàn)證方法的標(biāo)志名,供下面的depends調(diào)用"
                 classname="這個(gè)驗(yàn)證方法在哪個(gè)類中,為類全名"
                 method="驗(yàn)證方法的名稱"
                 methodParams="這個(gè)驗(yàn)證方法需要的參數(shù)類型,依次以逗號(hào)格開,為類全名"
                 depends="基于什么驗(yàn)證之上,可以為多個(gè)值,以逗號(hào)格開,值為方法的標(biāo)志名"
                 jsFunction="js的方法全名,格式為文件路徑.方法名。文件路徑以點(diǎn)隔開,
                             如果不填,默認(rèn)為org.apache.commons.validator.javascript.xxxx"
                 msg="對應(yīng)于properties文件中的一條,作為不通過驗(yàn)證時(shí)返回的信息"/>
   </global>
   <formset language="語言" country="城市" variant="方言?">
      <constant>
        <constant-name>驗(yàn)證方法的標(biāo)志名</constant-name>
        <constant-value>正則表達(dá)式</constant-value>
      </constant>
      <form name="bean 對象名稱">
         <field property="bean中的屬性名"  depends="需要什么樣的驗(yàn)證,可以為多個(gè)值,以逗號(hào)格開,值為方法的標(biāo)志名">
           <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的配置文件中,一共有如下幾個(gè)基本元素。

一、org.apache.commons.validator.Var
    它的作用是為配置文件(validator.xml)中的其它標(biāo)簽提供可取用的變量,為Field提供執(zhí)行驗(yàn)證所需要的其它參數(shù)值,比如最大長度。這個(gè)類有如下屬性:name,變量的名稱;value,變量的值;jsType,當(dāng)要自動(dòng)生成js的時(shí)候,js的類型。

二、org.apache.commons.validator.Arg
    它的作用是替換信息中的某一部分,或者為驗(yàn)證方法提供必需的參數(shù)值。這個(gè)類有如下屬性:bundle,資源文件名,用來存放所需要的信息。key,表示Arg的key或者value。name,表示Arg的名稱。position,這個(gè)Arg中的值用來替換信息中的哪一部分,需要替換的部分以{n}標(biāo)志。resource:key所指定的信息是否來自外部的資源文件,默認(rèn)為true;如果為true,則代表key為buddle屬性所指定的資源文件中的key。

三、org.apache.commons.validator.Msg
    它的作用是在驗(yàn)證不通過時(shí),應(yīng)該返回什么的信息。這個(gè)類有如下屬性:bundle,資源文件名,用來存放所需要的信息。key,表示Msg的key或者value。name,表示Msg的名稱。resource:key所指定的信息是否來自外部的資源文件,默認(rèn)為true;如果為true,則代表key為buddle屬性所指定的資源文件中的key。

四、org.apache.commons.validator.FormSet
    這個(gè)類管理通過一個(gè)Map所有要檢驗(yàn)的Form對象,key為Form的name;同時(shí)通過一個(gè)Map管理在<formset/>中定義的Constant,key為<constant-name>。同時(shí)其內(nèi)部有l(wèi)anguage,country, variant這幾個(gè)屬性,用來實(shí)現(xiàn)國際化。一個(gè)配置文件可以有多個(gè)FormSet,這些FormSet的區(qū)別是要求不同的本地化。

五、org.apache.commons.validator.Form
    這個(gè)類有如下屬性:name,這個(gè)form的名稱。lFields,一個(gè)保存所有Field的List。hFields,一個(gè)保存所有Field的FastHashMap,這個(gè)FastHashMap的key值是對應(yīng)Field的key屬性(對應(yīng)配置文件中的property)。這個(gè)類通過validate(...)方法用來對這個(gè)Form中的所有位置低于page的Field進(jìn)行驗(yàn)證。它實(shí)際是在一個(gè)循環(huán)中逐個(gè)調(diào)用每個(gè)field的validate(...)方法,然后把結(jié)果保存在一個(gè)ValidatorResults對象中。

六、org.apache.commons.validator.Field
    這個(gè)類有如下屬性:depends,依賴于什么驗(yàn)證規(guī)則。dependencyList保存了以逗號(hào)為分隔符把depends分割生成的list。page,如果是多步提交的話當(dāng)前是第幾步,值等于或小于表單中page性質(zhì)的值,JavaBean 才會(huì)得到處理;args,是一個(gè)數(shù)組;這個(gè)數(shù)組的元素為HashMap,每個(gè)HashMap在數(shù)組的位置就是其中的Arg中的position屬性的值;HashMap中的key值為Arg的name,如果這個(gè)name為null則為默認(rèn)的值:DEFAULT_ARG(org.apache.commons.validator.Field.DEFAULT),value為Arg對象。hVars,是一個(gè)FastHashMap,用來管理所有的Var對象,key為Var的name,值為Var對象。getIndexedListProperty表明這個(gè)property為JavaBean中的一個(gè)數(shù)組元素的index。

1、process(Map globalConstants, Map constants)
    這個(gè)方法用來執(zhí)行配置文件中變量的替換。它的兩個(gè)參數(shù)分別為在<global/>和<formset/>中定義的constant。在這個(gè)Map中,key為<constant/>標(biāo)簽中的constant-name,value為<constant-value>。在配置文件中,可以實(shí)現(xiàn)如下的變量使用方式:Form的property屬性,Var中的value屬性,Arg中的key屬性,Msg的key屬性,他們均可以通過{constant-name}的方式,引用在<global/>或者<formset/>標(biāo)簽中定義的constant。Arg中的key屬性,可以通過{Var:var-name}的方式引用在<var/>中定義的Var。

    FormSet中的process(...)方法依次調(diào)用其中的Form的process(...)方法,而Form的process(...)方法又依次調(diào)用其中的Field的process(...)方法。

2、validate(Map params, Map actions)
    執(zhí)行驗(yàn)證,其中actions保存了所有的ValidatorAction對象。它首先會(huì)從params取出key為Validator.BEAN_PARAM(java.lang.Object)的值作為要驗(yàn)證的JavaBean。然后通過generateKey()方法判斷當(dāng)前要驗(yàn)證的Field是否是IndexedList。如果是,則需要分別對這個(gè)List中的各個(gè)元素進(jìn)行驗(yàn)證;否則直接執(zhí)行對與JavaBean的特定屬性(property)執(zhí)行驗(yàn)證。

3、validateForRule(...)
    接受要執(zhí)行的ValidatorAction對象的同時(shí),還是會(huì)接受Map actions參數(shù),這是因?yàn)檫@個(gè)要執(zhí)行的ValidatorAction可能會(huì)依賴于其它的ValidatorAction。它會(huì)先查找以前的驗(yàn)證結(jié)果,如果以前沒有執(zhí)行過這個(gè)驗(yàn)證,那么執(zhí)行runDependentValidators(...)方法,執(zhí)行它所依賴于的ValidatorAction;如果通過,那么再對要執(zhí)行的ValidatorAction,執(zhí)行驗(yàn)證。


Commons-Validator(三)

    在Validator包中提供了一些Util類,同時(shí)提供了對基本數(shù)據(jù)類型,時(shí)間,E-mail,信用卡等格式的驗(yàn)證方法。

一、org.apache.commons.validator.util.Flags
    這個(gè)類用來管理一系列的Flag,其中的每個(gè)Flag的值都是2的N次方。然后每個(gè)Flag之間位與(&)就得到了整個(gè)Flags的值。

二、org.apache.commons.validator.util.ValidatorUtils
    這個(gè)類為Validator提供一些Utility的操作,共有三個(gè)方法。

1、replace(...)
    這個(gè)方法用來將一個(gè)字符串中某個(gè)特性的字符串替換為另一個(gè)字符串,注意這是一個(gè)全局替換方法。

2、getValueAsString(...)
    這個(gè)方法用來獲取某個(gè)Bean中的一個(gè)特定的屬性,然后把屬性值轉(zhuǎn)換為字符串返回。注意,String[]和Collection類型的值,如果里面不包含任何值,則直接返回""。

3、copyFastHashMap(...)
    很顯然的是對一個(gè)特定的FashHashMap執(zhí)行copy。這里要注意的是,如果value為Msg,Arg,Var類型的時(shí)候需要執(zhí)行clone,然后再保存。

三、org.apache.commons.validator.ValidatorUtil
    這個(gè)類完全通過調(diào)用上面的ValidatorUtils方法,實(shí)現(xiàn)自己的同名方法。只是多了一個(gè)getDelimitedRegExp(...)方法,用來生成一個(gè)正則表達(dá)式。

四、org.apache.commons.validator.DateValidator
    實(shí)現(xiàn)了單例模式。這個(gè)類用來檢查日期類型是否合法,日期的類型要通過參數(shù)傳遞給這個(gè)Validator。同時(shí)還有一個(gè)strict屬性,表示時(shí)候檢查過渡匹配所要求的日期格式。這個(gè)日期檢查就是通過formatter.parse(value)方法檢查時(shí)候有異常拋出。

五、org.apache.commons.validator.EmailValidator
    實(shí)現(xiàn)了單例模式。這個(gè)類用來檢查Email類型是否合法。它通過正則表達(dá)式實(shí)現(xiàn)驗(yàn)證。

六、org.apache.commons.validator.GenericTypeValidator
    這個(gè)類實(shí)現(xiàn)了對基本類型(Byte,Short,Int,Long,F(xiàn)loat, Date)的檢測,方法很簡單,就是通過每個(gè)類型的構(gòu)造函數(shù)創(chuàng)建相應(yīng)的對象,如果拋出異常就說明不符合,否則符合。同時(shí),這個(gè)類還提供對CreditCard驗(yàn)證的實(shí)現(xiàn)。


Commons-Validator(四)

    通過調(diào)用Validator的validate(...)方法,啟動(dòng)驗(yàn)證。

一、org.apache.commons.validator.Validator
    這個(gè)類是對一個(gè)Form執(zhí)行驗(yàn)證的起點(diǎn),通過調(diào)用這個(gè)類的validate(...)方法,啟動(dòng)驗(yàn)證。這個(gè)類中的formName屬性,對應(yīng)于Form中的name屬性。resources屬性,記錄這個(gè)Validator屬于哪一個(gè)ValidatorResources。parameters用來管理執(zhí)行validateXXX(...)方法時(shí)所需要的參數(shù),它是一個(gè)Map,key為類全名,value為這個(gè)類全名所指的類的一個(gè)對象。注意,這個(gè)parameters是這個(gè)Form中所有Field所要執(zhí)行的所有validateXXX(...)方法時(shí)所需要的參數(shù)集合。每個(gè)validateXXX(...)方法,根據(jù)自己需要的參數(shù)名(類全名),從這個(gè)parameters中查取自己所需要的參數(shù)。

二、org.apache.commons.validator.ValidatorAction
    每個(gè)ValidatorAction對應(yīng)于配置文件中的一個(gè)<validator/>。它有如下屬性:name,這個(gè)驗(yàn)正動(dòng)作的標(biāo)志名,用在depends屬性的配置中。classname,這個(gè)驗(yàn)證方法在哪個(gè)類中,為類全名。validationClass,由classname生成的Class。method,這個(gè)驗(yàn)證方法的名稱。validationMethod,由method生成的Method。methodParams,執(zhí)行這個(gè)驗(yàn)證方法所需要的參數(shù),值為逗號(hào)隔開的類全名,默認(rèn)值為Validator.BEAN_PARAM,Validator.VALIDATOR_ACTION_PARAM,Validator.FIELD_PARAM。parameterClasses,由methodParams生成的Class數(shù)組。depends,依賴何ValidatorAction之上。msg,如果沒有通過此驗(yàn)證,應(yīng)該返回什么消息。javascript,為對應(yīng)的javascript方法的代碼內(nèi)容。jsFunction,為對應(yīng)的js文件名稱。jsFunctionName,對應(yīng)的js中方法的名稱。

1、executeValidationMethod(...)
    這個(gè)方法用對Field中的值進(jìn)行檢測。它實(shí)際上就是通過反射,根據(jù)類名、方法名和參數(shù)類型執(zhí)行相應(yīng)的驗(yàn)證方法。要注意的是,如果這個(gè)Field為indexList類型的,則需要把Java Bean替換為對應(yīng)的Array中pos指定的元素。同時(shí)Field的key屬性中的[]要變?yōu)閇pos]。

2、這個(gè)類還提供了對js的基本操作,解釋如下:
*generateJsFunction()
    用來生成名為org.apache.commons.validator.javascript.validateXxxx的js文件名。其中Xxxx與name相對應(yīng)。

*readJavascriptFile(...)
    用來讀取js文件。由于一個(gè)js文件只包含一個(gè)方法,因此會(huì)讀取所有的內(nèi)容后,直接返回所讀取的所有內(nèi)容。

三、org.apache.commons.validator.ValidatorResults
    這個(gè)類管理對一個(gè)Form中的所有Field執(zhí)行驗(yàn)證的結(jié)果。它有如下屬性:hResults,用來管理對所有Field驗(yàn)證的結(jié)果,它的key為field的kye屬性,它的value為ValidatorResult對象。

四、org.apache.commons.validator.ValidatorResult
    這個(gè)類用來管理對于一個(gè)Field執(zhí)行驗(yàn)證的時(shí)候,所有的驗(yàn)證方法的結(jié)果。它有如下屬性:field,所要驗(yàn)證的Field對象。hAction,用來保存所有驗(yàn)證結(jié)果的Map,它的key為ValidatorAction中的name屬性,value為ResultStatus對象。

五、org.apache.commons.validator.ResultStatus
    它封裝了對某個(gè)Field執(zhí)行某個(gè)驗(yàn)證后的結(jié)果。它有如下屬性:valid,表示是否通過驗(yàn)證。result:為執(zhí)行驗(yàn)證后的結(jié)果。



Commons-Validator(五)

    最后,說明Validator是如何初始化的。

一、org.apache.commons.validator.ValidatorResourcesInitializer
    這個(gè)類用來初始化Validator框架,通過Digester包解析用戶自定義的xml配置文件。然后把解析的結(jié)果保存到ValidatorResources對象中,最后返回這個(gè)ValidatorResources對象。

二、org.apache.commons.validator.ValidatorResources
    這個(gè)類用來管理Validator框架中的資源。它包含如下屬性:hFormSets,一個(gè)FastHashMap,用來管理所有的FormSet,這個(gè)FastHashMap的key為根據(jù)FormSet中的本地信息生成的。hConstants,一個(gè)FastHashMap,用來管理<global/>中定義的constant。hActions,一個(gè)FastHashMap,用來管理ValidatorAction,它的key為ValidatorAction的name屬性。

三、與struts整合時(shí)需要增加的配置:
    在struts-config.xml文件中加入:
    
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
        <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
    </plug-in>

    其中validator-rules.xml,為Struts自帶的配置文件,配置了所有的驗(yàn)證方法;而validation.xml為用戶自己配置,配置要驗(yàn)證的對象。

四、org.apache.struts.validator.FieldChecks
    這個(gè)是Struts使用的核心驗(yàn)證類,用來實(shí)現(xiàn)各種驗(yàn)證規(guī)則。其中,validateXXX(...)就是想要?jiǎng)?chuàng)建的方法名,只要規(guī)則名沒有重復(fù)即可。validateXXX(...)方法的參數(shù)說明:
    Object             驗(yàn)證是在此JavaBean 對象上完成的
    ValidatorAction    當(dāng)前所執(zhí)行的ValidatorAction
      Field              被驗(yàn)證的字段對象
    ActionErrors       如果驗(yàn)證失敗,新增ActionError 對象的錯(cuò)誤對象
    HttpServletRequest 當(dāng)前的請求對象

五、org.apache.commons.validator.ValidatorResources
    這個(gè)類用來通過Arg替換Msg中格式為{N}的字符串

六、org.apache.commons.validator.ValidatorPlugIn
    這個(gè)類用來初始化Validator,然后把初始化生成的ValidatorResources對象保存到ServletContext中,key為VALIDATOR_KEY + config.getPrefix()。

七、org.apache.struts.validator.Resources
這個(gè)類用來初始化一個(gè)Validator對象,它首先通過key值VALIDATOR_KEY + config.getPrefix()從ServletContext取得相應(yīng)的ValidatorResources對象。它再以這個(gè)對象為參數(shù)構(gòu)造一個(gè)Validator對象,然后把驗(yàn)證方法需要的參數(shù)保存到Validator對象的parameters屬性中
 
七、org.apache.struts.validator.Resources
    這個(gè)類用來初始化一個(gè)Validator對象,它首先通過key值VALIDATOR_KEY + config.getPrefix()從ServletContext取得相應(yīng)的ValidatorResources對象。它再以這個(gè)對象為參數(shù)構(gòu)造一個(gè)Validator對象,然后把驗(yàn)證方法需要的參數(shù)保存到Validator對象的parameters屬性中。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Struts Validator驗(yàn)證器使用指南
hk編寫擴(kuò)展Struts Validator校驗(yàn)密碼輸入
Qiqi_Boy
Validator驗(yàn)證框架使用教程
Validator驗(yàn)證框架
Struts1.x系列教程(11):Validator驗(yàn)證框架高級(jí)應(yīng)用
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服