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

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

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

    風行天下

    JAVA太極
    posts - 4, comments - 10, trackbacks - 0, articles - 55
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    Jakarta Commons Validator

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

    Validate 驗證, 這件事情, 寫程序是非常重要的, 要先判斷數據是否正確, 才讓動作或事件繼續執行下去, 那么, 每次都寫相同的驗證模式, 不如對于這個 JavaBean 的數據驗證透過 XML 的設定, 如果正確則為驗證成功, 發生錯誤則為驗證失敗. 對于完全沒有用過 Bean Validation 的人來說, 聽起來, 可能有點吃力, 不過看過例子可能就了解了.


    最新版本為 v1.0.2


    binary 下載
    source 下載
    這次請下載 source 因為有許多范例程序在其中.


    SECTION 02 基本范例

    大家可以查看 org.apache.commons.validator.example.* 的文件, 其實很簡單, 只有 ValidateExample.java 及 ValidateBean.java 這兩個程序, 還有 validator-example.xml 來作為 Bean 的驗證設定. 另外 applicationResources.properties 是設定多國語言 (i18n)

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

    ValidatorResult result = results.getValidatorResult(propertyName);

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




    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 的地方是告知, 各種情況需要用到那一個 Validator 來判斷, 并且設定錯誤訊息, 將會參考 ApplicationResource.properties 的內容來顯示, 而 form 的判斷模式, 可以放入顯示時候的名稱, "errors.required=The {0} field is required." 如果發生驗證失敗, 將會把 nameForm.firstname.displayname ( 也就是寫在 properties 中的 First Name ) 取代 {0} 的地方


    SECTION 04 Validator 的寫法

    最重要的就是寫 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) : 檢查是否為空值,及去掉空白后長度是否大于零
    • isByte(java.lang.String value) : 是否可以轉成 byte
    • isCreditCard(java.lang.String value) : 是否為正確的信用卡號
    • isDate(java.lang.String value, java.util.Locale locale) : 是否為有效的日期, 可依照區域別判斷
    • isDate(java.lang.String value, java.lang.String datePattern, boolean strict) : 是否為有效的日期, 可輸入日期格式, 是否需要完全符合
    • isDouble(java.lang.String value) : 是否可以轉成 double
    • isEmail(java.lang.String value) : 是否為有效的 Email
    • isFloat(java.lang.String value) : 是否可以轉成 float
    • isInRange(double value, double min, double max) : 輸入數值是否在此區間 ( double )
    • isInRange(float value, float min, float max) : 輸入數值是否在此區間 ( float )
    • isInRange(int value, int min, int max) : 輸入數值是否在此區間 ( int )
    • isInRange(short value, short min, short max) : 輸入數值是否在此區間 ( short )
    • isInt(java.lang.String value) : 是否可以轉成 int
    • isLong(java.lang.String value) : 是否可以轉成 long
    • isShort(java.lang.String value) : 是否可以轉成 short
    • matchRegexp(java.lang.String value, java.lang.String regexp) : 是否符合輸入的 Regular Expression
    • maxLength(java.lang.String value, int max) : 長度不得大于輸入值
    • minLength(java.lang.String value, int min) : 長度不得小于輸入值
    我認為最好用的就是 matchRegexp 可以設定成各式各樣的判斷.


    SECTION 06 Struts Validator

    原本最早 , Struts-validate 是由 http://home.earthlink.net/~dwinterfeldt/revision.html 這里開始的, 2002 初開始使用 commons-validator, 就轉移到 jakarta 繼續開發, 你會發現 commons-validator 的開發人員都是 struts 的開發人員.


    在 struts 可以透過 plug-in 設定 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 , 是一個實現 PlugIn ( "init()" & "destroy()" ) 的一個 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 的驗證, 和 commons-validator 的驗證.

    最后的 /WEB-INF/validation.xml, 就是針對 FormBean 來作驗證, 當然你可以自行用 commons-validator 對于 ValueObject 作驗證.


    SECTION 07 總結

    如果不是要與 EIS ( DB layer ) 層級作處理的, 大家可以對于輸入的資料通過 Validator 標準的模式, 撰寫自己公司商業邏輯的 validator.

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 成人毛片18岁女人毛片免费看| 黄色一级毛片免费| 日韩精品免费在线视频| 免费人成视频在线观看不卡| 亚洲aⅴ无码专区在线观看| 女人18毛片水真多免费播放| 亚洲妇女无套内射精| 在线免费观看一级毛片| 亚洲国产精品日韩av不卡在线| 夫妻免费无码V看片| 午夜亚洲乱码伦小说区69堂| 又大又粗又爽a级毛片免费看| 精品久久久久久亚洲综合网| 国产美女无遮挡免费网站| 深夜A级毛片视频免费| 亚洲日韩一页精品发布| 亚欧免费一级毛片| 亚洲黄色免费网址| 免费无码黄十八禁网站在线观看| 亚洲αⅴ无码乱码在线观看性色| 五月婷婷亚洲综合| 国产在线观看免费视频软件| 久久精品a亚洲国产v高清不卡| 91视频国产免费| 亚洲1区2区3区精华液| 国内精品99亚洲免费高清| 免费国产黄网站在线观看视频 | 色多多A级毛片免费看| 美腿丝袜亚洲综合| 人人玩人人添人人澡免费| 亚洲小说区图片区| 国产免费AV片无码永久免费| 中文在线观看国语高清免费| 亚洲影院在线观看| 最近中文字幕免费mv视频7| 午夜不卡AV免费| 亚洲嫩模在线观看| 吃奶摸下高潮60分钟免费视频| 午夜老司机永久免费看片| 久久亚洲精品国产亚洲老地址 | 国产v亚洲v天堂无码网站|