Vaadin 7
以下内容适用于 Vaadin 7。 validate() 方法已在 Vaadin 8 中删除。
Vaadin 中的所有字段类型都实现了Validatable
接口有addValidator
接受 Validator 的实现作为参数的方法。
因此,要添加一个验证器来检查 TextField 值的长度,您可以这样做:
TextField textField = new TextField();
textField.addValidator(
new StringLengthValidator(
"Must be between 2 and 10 characters in length", 2, 10, false));
Vaadin 字段具有向用户显示验证错误的内置功能。默认情况下,该字段将以红色突出显示,并且该字段旁边会出现一个感叹号,将鼠标悬停在该字段上将向用户显示更详细的消息。
自动验证
默认情况下,该字段现在将在下一个服务器请求时验证,该请求包含向服务器发送的字段的更改值。如果字段设置为“立即”,则当字段失去焦点时会发生这种情况。如果该字段不是即时的,则当某些其他 UI 操作触发返回服务器的请求时,将进行验证。
显式验证
有时,您可能希望对何时进行验证以及何时向用户显示验证错误进行更多控制。可以通过设置禁用自动验证validationVisible
为假。
textField.setValidationVisible(false);
当您准备好验证字段时(例如在按钮单击侦听器中),您可以显式调用validate
(您也可以使用commit()
如果它是缓冲字段)TextField 实例上的方法来触发验证。validate
会抛出一个InvalidValueException
如果该值无效。如果您想使用 TextField 组件中包含的验证错误的内置显示,您还必须设置validationVisible
回到true
.
try {
textField.validate();
} catch (Validator.InvalidValueException ex) {
textField.setValidationVisible(true);
Notification.show("Invalid value!");
}
请注意,一旦validationVisbible设置回 true,验证将隐式发生,因此如果您想保持对验证的显式控制,则必须记住在下一个请求时将其设置回 false。
验证消息
可以从 Validator.InvalidValueException 实例中提取单独的验证消息,该实例在以下情况下抛出:validate()
or commit()
叫做。
try {
textField.validate();
} catch (Validator.InvalidValueException ex) {
for (Validator.InvalidValueException cause: ex.getCauses()) {
System.err.println(cause.getMessage());
}
}
验证者
验证器实现了 Validator 接口,Vaadin 附带了几个有用的验证器。查看 API 文档以获取有关这些内容的更多信息:https://vaadin.com/api/7.4.5/com/vaadin/data/Validator.html
自定义验证器很容易实现,这里是一个来自瓦丁之书:
class MyValidator implements Validator {
@Override
public void validate(Object value)
throws InvalidValueException {
if (!(value instanceof String &&
((String)value).equals("hello")))
throw new InvalidValueException("You're impolite");
}
}
final TextField field = new TextField("Say hello");
field.addValidator(new MyValidator());
field.setImmediate(true);
layout.addComponent(field);