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(IValidatablevalidatable) { 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"; } });
Теперь, когда файл не выбран и кнопка «Отправить» нажата, проверка будет выполнена.