<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 太差了
    想到你們真不容易,我只好說,希望你們進一步努力!  回復  更多評論
      

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


    網站導航:
     
    主站蜘蛛池模板: 国产91久久久久久久免费| 亚洲精品视频免费在线观看| 日韩免费观看视频| 无码亚洲成a人在线观看| 国产极品粉嫩泬免费观看| 亚洲av成人一区二区三区观看在线| 成人免费毛片视频| 亚洲精品无AMM毛片| 国产精品99久久免费| 青青草97国产精品免费观看| 亚洲国产精品一区二区九九| 老司机精品免费视频| 亚洲国产精品国自产拍AV| 最近中文字幕无免费| 亚洲精品福利你懂| 国产又粗又长又硬免费视频 | 亚洲制服丝袜一区二区三区| 亚洲精品免费网站| 精品亚洲成A人在线观看青青| 亚洲?V乱码久久精品蜜桃| 中文永久免费观看网站| 亚洲成在人天堂一区二区| 久久久久av无码免费网| 蜜芽亚洲av无码一区二区三区| 国内精品久久久久久久亚洲 | 免费黄色小视频网站| 一级一级一级毛片免费毛片| 久久精品国产亚洲av成人| 蜜桃视频在线观看免费网址入口| 羞羞网站在线免费观看| 久久久久亚洲AV成人无码网站| 一二三四在线播放免费观看中文版视频 | 一级做a爱过程免费视| 亚洲男人天堂2017| 日韩毛片无码永久免费看| 中文字幕免费播放| 亚洲熟妇AV乱码在线观看| 亚洲精品蜜桃久久久久久| 成年女人喷潮毛片免费播放| 99免费精品视频| 亚洲中文无码卡通动漫野外|