瓦丹7
以下内容适用于Vaadin7。Vaadin 8中的validate()方法已被删除。
Vaadin中的所有Field类型都实现了
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为false 可以禁用自动验证。
textField.setValidationVisible(false);
准备好验证字段时(例如,在按钮单击侦听器中),可以
在TextField实例上显式调用
validate(也可以使用,
commit()如果它是缓冲字段)方法来触发验证。如果该值无效,
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()或
commit()调用时引发。
try { textField.validate();} catch (Validator.InvalidValueException ex) { for (Validator.InvalidValueException cause: ex.getCauses()) { System.err.println(cause.getMessage()); }}验证者
验证程序实现了验证程序接口,并且Vaadin附带了几个有用的验证程序。查阅API文档以获取有关这些的更多信息:https
:
//vaadin.com/api/7.4.5/com/vaadin/data/Validator.html
自定义验证器易于实现,这是摘自Vaadin的示例:
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);


