检票口日期范围(从 - 到)验证

时间:2011-10-04 15:13:23

标签: wicket wicketstuff

我有一个表单,我需要验证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必须等于或大于wicket中选定的开始日期?

有什么想法吗?帮助赞赏。

1 个答案:

答案 0 :(得分: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