2011-10-04 109 views
2

我有一個窗體,我需要驗證DateFrom和DateTo。檢票日期範圍(從 - 到)驗證

我做這樣的:

 // start date 
    RequiredTextField<Date> startdateField = 
     new RequiredTextField<Date>("startDate", Date.class); 
    startdateField.add(new DatePicker(){ 
     @Override 
     protected CharSequence getIconUrl() { 
      return RequestCycle.get().getUrlRenderer().renderContextPathRelativeUrl("/image/date-picker.png"); 
     } 
    }); 

    Calendar cal = Calendar.getInstance(); 
    cal.add(Calendar.DATE,-1); 
    startdateField.add(DateValidator.minimum(cal.getTime())); 


    // end date 
    RequiredTextField<Date> enddateField = new RequiredTextField<Date>("endDate", Date.class); 
    enddateField.add(new DatePicker(){ 
     @Override 
     protected CharSequence getIconUrl() { 
      return RequestCycle.get().getUrlRenderer().renderContextPathRelativeUrl("/image/date-picker.png"); 
     } 
    }); 


    // enddateField.add(DateValidator.minimum(startdateField.getModel().getObject())); 
    // this does not work . Form submitted ? 

現在我怎麼可以把一個驗證,說明結束日期必須等於或磨碎機比在檢票選擇開始日期?

有什麼想法?幫助讚賞。

回答

3

DateValidator.minimum(startdateField.getModel().getObject())不工作,因爲在頁面構造時,startdateField的模式不成立的用戶提交,並具有在驗證時,應考慮爲最低值。

通常,如果您的驗證涉及多個組件,則適合使用IFormValidator。它的validate()方法將在成功調用每個相關個體FormComponent.validate()後調用,因此您必須保證在每個相關組件上都有有效的單獨輸入,然後才能繼續對其進行驗證。

驗證的一個重要方面是防止無效用戶輸入到達組件模型。因此,在驗證時,模型將不會更新,而不是FormComponent.getModelObject(),您必須在validate()方法中使用FormComponent.getInput()FormComponent.getConvertedInput()

IFormValidator validator = new AbstractFormValidator() { 
    public FormComponent<?>[] getDependentFormComponents() { 
     return new FormComponent[] { startDateField, endDateField }; 
    } 

    public void validate(Form<?> form) { 
     Date startDate = (Date) startDateField.getConvertedInput(); 
     Date endDate = (Date) endDateField.getConvertedInput(); 

     if (endDate.before(startDate)){ 
      error("Date range is invalid."); 
     } 
    } 
}; 
form.add(validator); 

考慮到,如果任何getDependentFormComponents()的FormComponents的是無效的(意思是不可見的,必需的,沒有投入,沒有自定義個人驗證等),該FormValidator將不會執行。

您也許還會發現該信息有用:Validating related fields

+0

ohh,非常感謝!做到了 :) – Shahriar