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

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

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

    隨筆 - 115  文章 - 481  trackbacks - 0
    <2007年8月>
    2930311234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    常用鏈接

    留言簿(19)

    隨筆檔案(115)

    文章檔案(4)

    新聞檔案(1)

    成員連接

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    為何要驗證(Validate)
       驗證是系統中一個必不可少的部分,前端驗證、后臺驗證中起來往往會發現,一個簡單完整的CRUD應用中,用來處理與驗證有關的代碼或配置就占了幾乎三分之一。Struts1.x時代的驗證就不提了。不管是Struts2(webwork)的驗證還是JSF里面提供的驗證,都是采用按步就班的方式,一筆一劃的寫出來,仍然沒有達到能使驗證工作變得簡單、靈活。

    如何驗證
      EasyJWeb完善了驗證系統,使驗證變得更加容易,靈活控制。你可以使用非常簡單的標簽或配置就能使系統擁有服務器端及客戶端驗證的功能。
      這里使用一個簡單的示例來介紹。有一個Person模型,如下所示:
      包含id、name、sex、borndate、height、mail、homepage等幾個屬性。

      假如我們要讓name、sex、heigth、borndate必填,并且borndate必須在1908到2008年之間, mail屬性只接收正確的email信息,homepage必須接收url信息。則我們只需要在Domain對象(可以是Entity對象,也可以是傳輸Command對象)中加入下面的配置信息即可:

     

    @FormPO(name="person",validators={@Validator(name="required",field="name,sex,heigth,borndate"),@Validator(name="range",field="borndate",value="min:1908-01-01;max:2008-01-01"),@Validator(name="email",field="mail"),@Validator(name="url",field="homepage")})
    public class Person{
    private Long id;
    private String name;
    private String sex;
    private String mail;
    private Integer heigth;
    private Date borndate;
    public String homepage;
    //setter及getter方法
    }



    不需要進行復雜的配置,只需要使用符合人類語言習慣的簡單標注,就能實現所需要的驗證業務邏輯。
      @Validator驗證標簽的使用非常靈活,你只要具有充分的想像力,就能描述出符合特定需要的驗證邏輯。比如上面的例子中,我們規定name不允許為空,字符數最小不能少于5個,最大不能超過10個,在進行字符驗證前需要清除掉前后的空格。則我們可以使用下面的驗證標簽:
      

    @Validator(name=”string”,value=”blank;trim;required;min:5;max:10;minMsg:最少不能少于5個字符;maxMsg:最大不能超過10字符”)
      
    private String name;

    錯誤信息的顯示
    在表示層的頁面模板中,我們可以使用下面的模板標簽來顯示驗證錯誤信息,
    $!errors-顯示全部驗證錯誤信息。
    $!errors.name-顯示name屬性(字段)的錯誤信息。
    如下面的的Form

    <form name="person_new_form" id="person_new_form" method="post" action="/ejf/person/create">
    請輸入姓名:
    <input name="name" type="text" id="person_name" value="$!name" />$!errors.name
    電子郵箱:
    <input name="mail" type="text" id="person_mail" value="$!mail" />$!errors.mail

    3、統一的驗證標簽@Validator

    public @interface Validator {
     
    public String name();// 驗證器的名稱,如required,string,range等
     public String value() default "";// 驗證器的值,使用;號作為分隔符存放各個參數。如value="required;min:5;max:20"
     public String msg() default "";// 默認錯誤提示信息,當驗證無法通過時顯示的提示信息
     public String field() default "";// 字段名稱,對于property及field類型的校驗均可用,也是錯誤對象的主屬性名稱。可以用于多個字段,此時需要使用,隔開
     public String displayName() default "";// 定義對象的顯示名稱,默認情況下為field的名稱,可以通過@Field中的name屬性定義。
     public ValidateType type() default ValidateType.Property;// 校驗類型,默認是對屬性進行校驗
     public boolean required() default false;// 是否必填字段,每個驗證器都可以通過設置屬性required=true來指定該屬性為必填項
     public String key() default "";// 多國語言顯示值的編碼
    }

     

    4、EasyJWeb內置的Validator驗證器
      Validators.RequiredValidator-用來定義必填屬性,預定義名稱required。
      Validators.StringValidator-字符串驗證器,定義字符串的屬性,預定義名稱string。
      Validators.URLValidator-URL字符串驗證器,匹配一個合法的URL,預定義名稱url。
      Validators.RegexpValidator-正則表達式驗證器,匹配指定條件的正則表達式,預定義名稱regex。
      Validators.EmailValidator-Email字符驗證器,匹配正確的email字符串,預定義名稱email。
      Validators.RangeValidator-范圍驗證器,用來限制屬性必須在指定的范圍之內,預定義名稱range。

      驗證器引擎的觸發也是非常靈活的,如果是普通的CRUD應用或者是基于普通CRUD應用基礎上擴展的應用,則在基本的添刪改查中會自動調用驗證邏輯。
      如果是自定義的Action,可通過調用form.toPo等方法觸法驗證邏輯。如果是使用IDAO接口進行的調用,則在進行數據持久化之前會調用驗證邏輯。

    5、自定義驗證器
      除了幾個內置的驗證器以外,EasyJWeb支持用戶自定義的驗證器。用戶自定義的的驗證器只需要實現Validator接口,即可注冊到系統中使用。Validator的內容如下:

    public interface Validator {
     
    /**
      * 執行具體的驗證操作
      * 
      * 
    @param obj
      *            驗證目標對象
      * 
    @param value
      *            驗證值
      * 
    @param errors
      *            驗證異常信息封裝
      
    */

     
    void validate(TargetObject obj, Object value, Errors errors); 
     
    /**
      * 驗證器默認錯誤信息
      * 
      * 
    @return 返回驗證器默認的錯誤提示信息
      
    */

     String getDefaultMessage();
    }

      在實際應用中,一般通過使用繼承抽象類AbstractValidator來實現自定義的驗證器。如下面是最簡單驗證器Required的實現:

     public class RequiredValidator extends AbstractValidator {
      
    public RequiredValidator() {

      }

      
    public void validate(TargetObject obj, Object value, Errors errors) {
       
    if (value == null)
        addError(obj, value, errors);
       
    else if (value instanceof String) {
       }

      }

      
    public String getDefaultMessage() {
       
    return "{%0}不能為空!";
      }

     }


     

    posted on 2007-08-23 09:48 簡易java框架 閱讀(1605) 評論(3)  編輯  收藏

    FeedBack:
    # re: 人性化的驗證(Validate)系統 2007-08-23 12:17 編程、設計是職業更是愛好
    似乎是人性化,但對于程序員來說,應有透明的窗口去看server/client的實現細節。  回復  更多評論
      
    # re: 人性化的驗證(Validate)系統 2007-08-25 00:48 Jie
    和Hibernate Validation做法沒有區別。復雜系統,這種方式還是不能滿足要求
    可能一種方式就是annonation和rule engine結合使用  回復  更多評論
      
    # re: 人性化的驗證(Validate)系統 2007-08-27 22:49 太差了
    想到你們真不容易,我只好說,希望你們進一步努力!  回復  更多評論
      

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲色最新高清av网站| 国内精品免费视频精选在线观看 | 两性刺激生活片免费视频| 亚洲一区二区三区国产精品无码| 最新黄色免费网站| 美女免费精品高清毛片在线视| 亚洲av无码成人精品区在线播放| 国产一级一毛免费黄片| 亚洲三级中文字幕| 久久久精品国产亚洲成人满18免费网站 | 亚洲AV日韩AV天堂久久| 好吊妞视频免费视频| 免费在线观影网站| 亚洲人成色在线观看| 久久精品国产亚洲| 国产男女猛烈无遮挡免费视频网站| 久久免费观看视频| 亚洲最大的成人网站| 亚洲精品高清久久| 深夜国产福利99亚洲视频| 最近2019免费中文字幕6| 久久性生大片免费观看性| 亚洲人成自拍网站在线观看| 亚洲日本va午夜中文字幕一区| 日本免费人成黄页在线观看视频| 日韩免费电影网址| 一级毛片正片免费视频手机看| 亚洲AV无码久久久久网站蜜桃| 亚洲日韩欧洲无码av夜夜摸| 免费一级毛片女人图片| 中文字幕无码成人免费视频| 99精品视频在线观看免费播放| 一区二区三区在线免费| 日日摸夜夜添夜夜免费视频| 国产成人精品亚洲日本在线| 亚洲成人中文字幕| 久久亚洲熟女cc98cm| 亚洲欧洲免费视频| 亚洲成人激情在线| 亚洲Av熟妇高潮30p| 久久精品亚洲一区二区三区浴池|