1

dateTimefield を検証するカスタム バリデータを作成しました。私の問題は、datetimefield 変数に追加できないことです

タイプのメソッド add( IValidator<? super Date>) はFormComponent<Date>、引数 (DateTimeFieldValidator) には適用されません

これは私が得ているエラーです。

DateTimeField を検証する標準的な方法はありますか?

package validators;

import java.text.ParsePosition;
import java.text.SimpleDateFormat;


import org.apache.wicket.extensions.yui.calendar.DateTimeField;
import org.apache.wicket.validation.IValidatable;
import org.apache.wicket.validation.IValidator;
import org.apache.wicket.validation.ValidationError;


public class DateTimeFieldValidator implements IValidator<DateTimeField> {
/**
 * 
 */
private static final long serialVersionUID = 2342344609244L;
public DateTimeFieldValidator() {

}



private void error(IValidatable<DateTimeField> validatable, String errorKey) {
    ValidationError error = new ValidationError();
    error.addMessageKey(getClass().getSimpleName() + "." + errorKey);
    validatable.error(error);
}


public void validate(IValidatable<DateTimeField> validatable) {


    DateTimeField dateTime = (DateTimeField) validatable.getValue();

    if ( dateTime== null){
        error(validatable, "invalid.datetime");
    }
    else{

        if( dateTime.getHours()!=null){
            if( dateTime.getHours()>12  || dateTime.getHours()<0){

                error(validatable, "invalid.hour");
            }
        }
        else{
            error(validatable, "invalid.hour");
        }


        if(dateTime.getMinutes()!=null){
            if( dateTime.getMinutes() > 60 ){

                error(validatable, "invalid.hour");
            }
        }else {
            error(validatable, "invalid.minutes");
        }

        if( dateTime.getDate() == null ){
            error(validatable, "invalid.date");
        }

    }  
}
boolean isLegalDate(String s) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    sdf.setLenient(false);
    return sdf.parse(s, new ParsePosition(0)) != null;
}

}

これがバリデータを追加する方法です。

startDateTimeField.add(new DateTimeFieldValidator());
4

2 に答える 2

6

あなたの DateTimeFieldValidator はIValidator<Date>代わりに実装する必要がありますIValidator<DateTimeField>

于 2012-04-04T17:33:49.107 に答える
0

私は次の方法でdatetimefieldを検証することになります..そして、datetimefield(yui)に検証が組み込まれていることを確認します-これは実際にすべての基本的な検証を処理します。あなたがしなければならないのはフォルダにXXX.propertiesファイルを置くことだけです-

startDate.after.enddateを使用したように、独自のエラーキーとメッセージを追加することもできます

 IFormValidator validator = new AbstractFormValidator() {
        /**
         * 
         */
        private static final long serialVersionUID = -3252346839511722L;

        public FormComponent<?>[] getDependentFormComponents() {
            return new FormComponent[] { startField, endField };
        }
        ValidationError error = new ValidationError();

        public void validate(Form<?> form) {

           Date startDate = (Date) startField.getConvertedInput();
           if(endField.isEnabled()){
                Date endDate = (Date) endField.getConvertedInput();

                if (endDate.before(startDate)){

                    error.addMessageKey(getClass().getSimpleName()  + "startDate.after.enddate");
                    startField.error(error);
                }
           }
        }
    };
    logForm.add(validator );
于 2012-04-05T15:43:02.997 に答える