我有一个实现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);
}
}
实例化TextField
corporateNameInput = new TextField<String>(CORPORATE_NAME_INPUT_ID, new PropertyModel<String>(this, ""));
设置TextField属性
corporateNameInput.add(new CorporateNameValidator());
corporateNameInput.setOutputMarkupPlaceholderTag(true);
然后我将TextField添加到表单。
答案 0 :(得分:8)
来自IValidator
的JavaDoc:
表示可以验证
IValidatable
对象的验证程序的接口。除非验证器也实现
INullAcceptingValidator
接口, Wicket不会将null
值传递给IValidator#validate(IValidatable)
方法。
它符合设计,您应该实现INullAcceptingValidator
。