Wicket FileUpload валидатор не выполняется?

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";
    }

});

Теперь, когда файл не выбран и кнопка «Отправить» нажата, проверка будет выполнена.