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()メソッドは、各依存する individual の呼び出しが成功した後に呼び出されるFormComponent.validate()ため、完全に検証する前に、各依存コンポーネントに有効な個々の入力があることが保証されます。

検証の重要な側面の 1 つは、無効なユーザー入力がコンポーネントのモデルに到達するのを防ぐことです。したがって、検証時には、Models はまだ更新されず、メソッド内で の代わりにorFormComponent.getModelObject()を使用する必要があります。FormComponent.getInput()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);

の FormComponents のいずれかがgetDependentFormComponents()有効でない場合 (つまり、表示されていない、必須で入力がない、カスタムの個別の検証に失敗しているなど) 場合、FormValidatorは実行されません。

次の情報も役立つ場合があります:関連フィールドの検証

于 2011-10-04T15:32:32.663 に答える