<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    風(fēng)行天下

    JAVA太極
    posts - 4, comments - 10, trackbacks - 0, articles - 55
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Jakarta Commons Validator

    Posted on 2005-04-04 11:19 風(fēng)太少 閱讀(373) 評(píng)論(0)  編輯  收藏
    SECTION 01 Validator 總覽

    Validate 驗(yàn)證, 這件事情, 寫(xiě)程序是非常重要的, 要先判斷數(shù)據(jù)是否正確, 才讓動(dòng)作或事件繼續(xù)執(zhí)行下去, 那么, 每次都寫(xiě)相同的驗(yàn)證模式, 不如對(duì)于這個(gè) JavaBean 的數(shù)據(jù)驗(yàn)證透過(guò) XML 的設(shè)定, 如果正確則為驗(yàn)證成功, 發(fā)生錯(cuò)誤則為驗(yàn)證失敗. 對(duì)于完全沒(méi)有用過(guò) Bean Validation 的人來(lái)說(shuō), 聽(tīng)起來(lái), 可能有點(diǎn)吃力, 不過(guò)看過(guò)例子可能就了解了.


    最新版本為 v1.0.2


    binary 下載
    source 下載
    這次請(qǐng)下載 source 因?yàn)橛性S多范例程序在其中.


    SECTION 02 基本范例

    大家可以查看 org.apache.commons.validator.example.* 的文件, 其實(shí)很簡(jiǎn)單, 只有 ValidateExample.java 及 ValidateBean.java 這兩個(gè)程序, 還有 validator-example.xml 來(lái)作為 Bean 的驗(yàn)證設(shè)定. 另外 applicationResources.properties 是設(shè)定多國(guó)語(yǔ)言 (i18n)

    大家可以直接參閱 ValidateExample, 設(shè)定 Validator 的方法其實(shí)很簡(jiǎn)單
    1. 建立 ValidatorResource Instance , 并且取得驗(yàn)證的配置文件
      
      ValidatorResources resources = new ValidatorResources();
      in = ValidateExample.class.getResourceAsStream("validator-example.xml");
      ValidatorResourcesInitializer.initialize(resources, in);
      			
    2. 建立要被驗(yàn)證的 JavaBean
      
      ValidateBean bean = new ValidateBean();
      
    3. 建立驗(yàn)證者, 并且告知是哪個(gè) JavaBean 需要驗(yàn)證
      
      Validator validator = new Validator(resources, "ValidateBean");
      validator.addResource(Validator.BEAN_KEY, bean);
      
    4. 建立驗(yàn)證結(jié)果儲(chǔ)存區(qū), 將驗(yàn)證結(jié)果放入
      
      ValidatorResults results = null;
      results = validator.validate();
      
    ValidatorResults 是一個(gè) HashMap 儲(chǔ)存 ValidateResult, 他是依照 property 為 key,

    ValidatorResult result = results.getValidatorResult(propertyName);

    取出 ValidatorResult; 接著用 isValid() method 去判斷是否驗(yàn)證成功.




    SECTION 03 validator-example.xml

    
       <global>
          <validator name="int"
                     classname="org.apache.commons.validator.TestTypeValidator"
                     method="validateInt"
                     methodParams="java.lang.Object,org.apache.commons.validator.Field"
                     msg="errors.int"/>
    
          <validator name="required"
                     classname="org.apache.commons.validator.TestValidator"
                     method="validateRequired"
                     methodParams="java.lang.Object,org.apache.commons.validator.Field"
                     msg="errors.required"/>
       </global>
       <formset>
          <form name="ValidateBean">
             <field property="firstName"  depends="required">
             	   <arg0 key="nameForm.firstname.displayname"/>
             </field>    
    
          </form>
       </formset>   
    </form-validation>
    
    
    
    在 global 的地方是告知, 各種情況需要用到那一個(gè) Validator 來(lái)判斷, 并且設(shè)定錯(cuò)誤訊息, 將會(huì)參考 ApplicationResource.properties 的內(nèi)容來(lái)顯示, 而 form 的判斷模式, 可以放入顯示時(shí)候的名稱(chēng), "errors.required=The {0} field is required." 如果發(fā)生驗(yàn)證失敗, 將會(huì)把 nameForm.firstname.displayname ( 也就是寫(xiě)在 properties 中的 First Name ) 取代 {0} 的地方


    SECTION 04 Validator 的寫(xiě)法

    最重要的就是寫(xiě) public static boolean validateXxxxx( Object bean, Field field ) 這樣的 method
    
    public class TestValidator {
                                                              
       /**
        * Checks if the field is required.
        *
        * @param 	value 		The value validation is being performed on.
        * @return	boolean		If the field isn't null and 
        *                           has a length greater than zero, 
        *                           true is returned.  
        *                           Otherwise false.
       */
       public static boolean validateRequired(Object bean, Field field) {
          String value = ValidatorUtil.getValueAsString(bean, field.getProperty());
    
          return !GenericValidator.isBlankOrNull(value);
       }
    }  
    



    SECTION 05 GenericValidator

    目前 GenericValidator 提供了
    • isBlankOrNull(java.lang.String value) : 檢查是否為空值,及去掉空白后長(zhǎng)度是否大于零
    • isByte(java.lang.String value) : 是否可以轉(zhuǎn)成 byte
    • isCreditCard(java.lang.String value) : 是否為正確的信用卡號(hào)
    • isDate(java.lang.String value, java.util.Locale locale) : 是否為有效的日期, 可依照區(qū)域別判斷
    • isDate(java.lang.String value, java.lang.String datePattern, boolean strict) : 是否為有效的日期, 可輸入日期格式, 是否需要完全符合
    • isDouble(java.lang.String value) : 是否可以轉(zhuǎn)成 double
    • isEmail(java.lang.String value) : 是否為有效的 Email
    • isFloat(java.lang.String value) : 是否可以轉(zhuǎn)成 float
    • isInRange(double value, double min, double max) : 輸入數(shù)值是否在此區(qū)間 ( double )
    • isInRange(float value, float min, float max) : 輸入數(shù)值是否在此區(qū)間 ( float )
    • isInRange(int value, int min, int max) : 輸入數(shù)值是否在此區(qū)間 ( int )
    • isInRange(short value, short min, short max) : 輸入數(shù)值是否在此區(qū)間 ( short )
    • isInt(java.lang.String value) : 是否可以轉(zhuǎn)成 int
    • isLong(java.lang.String value) : 是否可以轉(zhuǎn)成 long
    • isShort(java.lang.String value) : 是否可以轉(zhuǎn)成 short
    • matchRegexp(java.lang.String value, java.lang.String regexp) : 是否符合輸入的 Regular Expression
    • maxLength(java.lang.String value, int max) : 長(zhǎng)度不得大于輸入值
    • minLength(java.lang.String value, int min) : 長(zhǎng)度不得小于輸入值
    我認(rèn)為最好用的就是 matchRegexp 可以設(shè)定成各式各樣的判斷.


    SECTION 06 Struts Validator

    原本最早 , Struts-validate 是由 http://home.earthlink.net/~dwinterfeldt/revision.html 這里開(kāi)始的, 2002 初開(kāi)始使用 commons-validator, 就轉(zhuǎn)移到 jakarta 繼續(xù)開(kāi)發(fā), 你會(huì)發(fā)現(xiàn) commons-validator 的開(kāi)發(fā)人員都是 struts 的開(kāi)發(fā)人員.


    在 struts 可以透過(guò) plug-in 設(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>
    
    ValidatorPlugIn.java , 是一個(gè)實(shí)現(xiàn) PlugIn ( "init()" & "destroy()" ) 的一個(gè) Servlet
    
    public class ValidatorPlugIn implements PlugIn {
        public void init(ActionServlet servlet, ModuleConfig config)
            throws ServletException {
    		......
    		initResources();
    		......
    	}
    
    	protected void initResources() throws IOException, ServletException {
    		......
    		ValidatorResourcesInitializer.initialize(resources, bis, false);
    		......
    	}
    
        public void destroy() {
    		.....
        }
    }
    
    而 ValidatorResourcesInitializer 就是屬于 commons-validator 的組件,

    另外的 /WEB-INF/validator-rules.xml, 包含了 client 端 javascirpt 的驗(yàn)證, 和 commons-validator 的驗(yàn)證.

    最后的 /WEB-INF/validation.xml, 就是針對(duì) FormBean 來(lái)作驗(yàn)證, 當(dāng)然你可以自行用 commons-validator 對(duì)于 ValueObject 作驗(yàn)證.


    SECTION 07 總結(jié)

    如果不是要與 EIS ( DB layer ) 層級(jí)作處理的, 大家可以對(duì)于輸入的資料通過(guò) Validator 標(biāo)準(zhǔn)的模式, 撰寫(xiě)自己公司商業(yè)邏輯的 validator.

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产国产人免费视频成69堂| 深夜国产福利99亚洲视频| 77777午夜亚洲| 最近中文字幕无免费视频| 日韩电影免费在线观看网址 | 免费高清av一区二区三区| 免费激情网站国产高清第一页| 国产亚洲无线码一区二区| 四虎在线最新永久免费| 色吊丝免费观看网站| 亚洲AV日韩精品久久久久久| 成人免费无码大片a毛片| 国产精品网站在线观看免费传媒 | 亚洲精品你懂的在线观看| 91嫩草国产在线观看免费| 国产99久久久国产精免费| 亚洲大香伊人蕉在人依线| 亚洲国产成人影院播放| 国产精品久久永久免费| jizz在线免费播放| 亚洲最大中文字幕无码网站| 一级看片免费视频| 欧洲精品免费一区二区三区| 无码日韩精品一区二区三区免费 | 亚洲人成综合网站7777香蕉| 亚洲人成图片小说网站| 男女啪啪永久免费观看网站| 日本免费中文字幕| 四虎精品成人免费视频| 激情综合亚洲色婷婷五月APP| 亚洲女初尝黑人巨高清| 免费人成在线观看网站视频| 中文毛片无遮挡高潮免费| 国产精品网站在线观看免费传媒| 在线精品自拍亚洲第一区| 亚洲人成免费网站| 久久久无码精品亚洲日韩蜜桃| 亚洲精品无码99在线观看| 免费看大美女大黄大色| 91麻豆最新在线人成免费观看| 久久免费视频一区|