wicket日期范围(从到)验证

wicket日期范围(从到)验证,wicket,wicketstuff,Wicket,Wicketstuff,我有一个表单,需要在其中验证DateFrom和DateTo 我是这样做的: // start date RequiredTextField<Date> startdateField = new RequiredTextField<Date>("startDate", Date.class); startdateField.add(new DatePicker(){ @Override protec

我有一个表单,需要在其中验证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 ?
//开始日期
RequiredTextField startdateField=
新的RequiredTextField(“startDate”,Date.class);
添加(新的日期选择器(){
@凌驾
受保护的字符序列getIconUrl(){
返回RequestCycle.get().getUrlRenderer().renderContextPathRelativeUrl(“/image/date picker.png”);
}
});
Calendar cal=Calendar.getInstance();
cal.add(日历日期,-1);
add(DateValidator.minimum(cal.getTime());
//结束日期
RequiredTextField enddateField=新的RequiredTextField(“endDate”,Date.class);
添加(新的日期选择器(){
@凌驾
受保护的字符序列getIconUrl(){
返回RequestCycle.get().getUrlRenderer().renderContextPathRelativeUrl(“/image/date picker.png”);
}
});
//add(DateValidator.minimum(startdateField.getModel().getObject());
//这是行不通的。提交的表格?
现在,我如何在wicket中设置一个验证器,声明endDate必须等于或大于所选的开始日期


有什么想法吗?感谢您的帮助。

DateValidator.minimum(startdateField.getModel().getObject())
不起作用,因为在页面构建时,
startdateField
的模型不包含用户提交的值,必须在验证时将其作为最小值考虑

通常,如果您的验证涉及多个组件,则使用一个组件是合适的。它的方法将在成功调用每个依赖组件后被调用,因此在继续验证它们之前,保证每个依赖组件上都有有效的单个输入

验证的一个重要方面是防止无效的用户输入到达组件的模型。因此,在验证时,模型尚未更新,您必须在
validate()
方法中使用or来代替

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);
IFormValidator validator=新的AbstractFormValidator(){
public FormComponent[]getDependentFormComponents(){
返回新的FormComponent[]{startDateField,endDateField};
}
公共无效验证(表格){
Date startDate=(Date)startDateField.getConvertedInput();
日期endDate=(日期)endDateField.getConvertedInput();
如果(开始日期之前的结束日期)){
错误(“日期范围无效”);
}
}
};
添加(验证器);
考虑到如果中的任何FormComponents无效(这意味着不可见、不需要输入、自定义单独验证失败等),则将不会执行
FormValidator

您可能还会发现这些信息很有用: