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 ?

现在我如何放置一个验证器,说明 endDate 必须等于或大于检票口中选择的开始日期?

任何的想法?帮助表示赞赏。

4

1 回答 1

3

DateValidator.minimum(startdateField.getModel().getObject())不起作用,因为在页面构建时,startdateField''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''的模型的值

通常,如果您的验证涉及多个组件,则适合使用IFormValidator. 它的validate()方法将在每个依赖个体成功调用后被调用FormComponent.validate(),因此在继续完全验证它们之前,您可以保证在每个依赖组件上都有有效的个人输入。

验证的一个重要方面是防止无效的用户输入到达组件的模型。因此,在验证时,模型还不会更新,FormComponent.getModelObject()您必须在方法中使用FormComponent.getInput()or而不是。FormComponent.getConvertedInput()validate()

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);

考虑到如果其中的任何 FormComponentsgetDependentFormComponents()无效(这意味着不可见、需要且没有输入、自定义个人验证失败等),FormValidator则不会执行。

您可能还会发现此信息很有用:验证相关字段

于 2011-10-04T15:32:32.663 回答