java - 日期时间字段 validator

标签 java validation wicket

我创建了一个自定义 validator 来验证 dateTimefield。 我的问题是我无法将其添加到 日期时间字段变量

The method add(IValidator<? super Date>) in the type FormComponent<Date> is not applicable for the arguments (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;
}

}

这就是我添加 validator 的方式。

startDateTimeField.add(new DateTimeFieldValidator());

最佳答案

您的 DateTimeFieldValidator 必须实现 IValidator<Date>而不是 IValidator<DateTimeField>

关于java - 日期时间字段 validator ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10016193/

相关文章:

java - 如何通过 Java 在 Android 中创建新联系人?

java - MySQL查询抛出异常,而不是一个空的ResultSet

C++ cin 只接受数值

validation - 如何使用 ActiveRecord 中的复合键验证模型?

java - 在 wicket 中,如何创建未由组件层次结构/布局定义的 RadioGroup?

java - 从警报管理器启动服务(无空构造函数)

java - 从独立线程重定向 Icefaces 页面?

validation - Asp.Net MVC : Execution of the child request failed. 请检查 InnerException 以获取更多信息

wicket - 在 Wicket 中定义自己的反馈消息

java - 我如何在 Wicket 1.5 中模仿 HybridUrlCodingStrategy?