Wicket - 当TextField为空时,IValidator不调用validate

Com*_*ver 2 java forms validation wicket

我有一个实现的类IValidator.我将此验证器类添加到我的TextField,并validate(Invalidatable<T>)调用覆盖的方法.但是,如果TextField为空,则不调用该方法,并且不会进行验证.为什么会这样?这是预期的行为吗?

验证员类

public class CorporateNameValidator implements IValidator<String> {

        private static final String ERROR_EMPTY = "Error";

        @Override
        public void validate(IValidatable<String> validatable) {

            //Method not called when TextField has blank value.

            final String name = validatable.getValue();

            info("NAME: " + name);
        }
    }
Run Code Online (Sandbox Code Playgroud)

实例化TextField

corporateNameInput = new TextField<String>(CORPORATE_NAME_INPUT_ID, new PropertyModel<String>(this, ""));

设置TextField属性

corporateNameInput.add(new CorporateNameValidator()); corporateNameInput.setOutputMarkupPlaceholderTag(true);

然后我将TextField添加到表单中.

Mar*_*rst 9

来自JavaDoc IValidator:

表示可以验证IValidatable对象的验证器的接口.

除非验证器也实现了INullAcceptingValidator接口,否则Wicket不会将null值传递给IValidator#validate(IValidatable)方法.

它是按照设计的,你应该实现INullAcceptingValidator.