Jan*_*ski 2 java forms validation vaadin vaadin7
我正在用vaadin创建一个Java项目.现在我有一个用户注册表格,如下所示:
public class RegistrationComponent extends CustomComponent implements View {
public static final String VIEW_NAME = "Registration";
public RegistrationComponent(){
Panel panel = new Panel("Registration Form");
panel.setSizeUndefined();
FormLayout content = new FormLayout();
CheckBox checkBox1, checkBox2, checkBox3;
checkBox1 = new CheckBox("Check Box 1");
checkBox2 = new CheckBox("Check Box 2");
checkBox3 = new CheckBox("Check Box 3");
checkBox1.setRequired(true);
checkBox2.setRequired(true);
TextField mailTextField = new TextField("Email Address");
TextField passwordTextField = new TextField("Password");
TextField confirmPasswordTextField = new TextField("Confirm Password");
final Button submitButton = new Button("Submit");
content.addComponent(mailTextField);
content.addComponent(passwordTextField);
content.addComponent(confirmPasswordTextField);
content.addComponent(checkBox1);
content.addComponent(checkBox2);
content.addComponent(checkBox3);
content.addComponent(submitButton);
content.setSizeUndefined(); // Shrink to fit
content.setMargin(true);
panel.setContent(content);
setCompositionRoot(panel);
//listeners:
submitButton.addClickListener(new Button.ClickListener() {
public void buttonClick(Button.ClickEvent event) {
//
}
});
}
@Override
public void enter(ViewChangeListener.ViewChangeEvent event){
//
}
}
Run Code Online (Sandbox Code Playgroud)
当然,除了显示之外,表单不会执行任何操作.我想做的是,如果不满足某些要求,则Vaadin会在字段旁边显示错误消息.要求本身并不重要(假设我希望电子邮件字段包含至少8个字符).我想知道的是:有没有简单的内置方法呢?我在这里:https: //vaadin.com/api/com/vaadin/data/Validator.html
但我不明白如何使用验证器,或者即使这是我想要使用的.我一直在谷歌寻找用法示例,但到目前为止没有成功.感谢帮助!
Eri*_*ric 15
以下内容适用于Vaadin 7.在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));
Run Code Online (Sandbox Code Playgroud)
Vaadin字段具有用于向用户显示验证错误的内置功能.默认情况下,该字段将以红色突出显示,并且该字段旁边会出现一个感叹号,将鼠标悬停在该字段上将向用户显示更详细的消息.
默认情况下,该字段现在将在下一个服务器请求上进行验证,该请求包含服务器字段的更改值.如果该字段设置为"立即",则在该字段失去焦点时会发生这种情况.如果该字段不是立即的,则当某个其他UI操作触发返回服务器的请求时将进行验证.
有时,您可能希望更多地控制验证何时发生以及何时向用户显示验证错误.可以通过设置validationVisible为false 来禁用自动验证.
textField.setValidationVisible(false);
Run Code Online (Sandbox Code Playgroud)
当您准备好验证字段时(例如,在按钮单击侦听器中),您可以 在TextField实例上显式调用validate(commit()如果它是缓冲字段)方法,以触发验证.如果值无效,validate则抛出一个InvalidValueException.如果您想使用包含在TextField组件验证错误的内置显示器还必须设置validationVisible回true.
try {
textField.validate();
} catch (Validator.InvalidValueException ex) {
textField.setValidationVisible(true);
Notification.show("Invalid value!");
}
Run Code Online (Sandbox Code Playgroud)
请注意,一旦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());
}
}
Run Code Online (Sandbox Code Playgroud)
验证器实现了Validator接口,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);
Run Code Online (Sandbox Code Playgroud)