Wicket FileUpload валидатор не выполняется?
проблема
Реализован пользовательский валидатор для компонента FileUpload, см. Фрагменты кода…
FileUploadField fileUpload = new FileUploadField("fileupload",new Model());
fileUpload .add(new AbstractValidator() {
protected void onValidate(IValidatable validatable) {
FileUpload fileUpload = (FileUpload) validatable.getValue();
//validate fileUpload
}
protected String resourceKey() {
return "yourErrorKey";
}
});
Однако, если пользователь не выбрал файл для загрузки и нажал кнопку отправки, прикрепленный валидатор загрузки будет проигнорирован !?
Решение
По умолчаниюAbstractValidator (ваш пользовательский валидатор) будетnot validate on null value, см. Исходный код:
Файл: AbstractValidator.java
* @see IValidator#validate(IValidatable)
*/
public final void validate(IValidatable validatable)
{
if (validatable.getValue() != null || validateOnNullValue())
{
onValidate(validatable);
}
}
Чтобы исправить это, просто переопределите методvalidateOnNullValue() следующим образом:
FileUploadField fileUpload = new FileUploadField("fileupload",new Model());
fileUpload .add(new AbstractValidator() {
public boolean validateOnNullValue(){
return true;
}
protected void onValidate(IValidatable validatable) {
FileUpload fileUpload = (FileUpload) validatable.getValue();
}
protected String resourceKey() {
return "yourErrorKey";
}
});
Теперь, когда файл не выбран и кнопка «Отправить» нажата, проверка будет выполнена.