我已经创建了一个自定义验证器来验证dateTimefield。 我的问题是我无法将其添加到 datetimefield变量
类型
IValidator<? super Date>
中的方法add(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());
答案 0 :(得分:6)
您的DateTimeFieldValidator必须实现IValidator<Date>
而不是IValidator<DateTimeField>
答案 1 :(得分: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 );