您好我刚刚开始使用Vaadin 7并且BeanValidator
正在工作。但是,我有一些问题。我正在使用的代码如下:
BeanItem<RegisterBean> item = new BeanItem<RegisterBean>(new RegisterBean());
final FieldGroup binder = new FieldGroup(item);
final TextField email = new TextField("email");
email.addValidator(new BeanValidator(RegisterBean.class, "email"));
使用BeanValidator验证正常。使用@NotNull
标记,我也可以验证Null值。但是,我想向用户提供视觉线索,表格中的字段不能留空。为此,我使用了:
email.setRequired(true);
但是,在添加setRequired
之后,表单的BeanValidation不再有效吗?
这是一个限制吗? 我该如何解决它?
答案 0 :(得分:2)
您应该依赖bean验证本身并使用fieldgroup。
我的模型如下:
@NotNull(message="Please enter a valid email address.")
@Email(message="Please enter a valid email address.")
@Size(min = 3, max = 255, message="Please enter a valid email address.")
@Column(name="P_EMAIL", nullable=true, length=255)
private String email;
在您的视图中执行buildAndBind
Field<?> email = binder.buildAndBind("email");
或者在字段声明中使用注释@PropertyId("email")
。剩下的就是魔术。
而不是FieldGroup
使用BeanFieldGroup
。
问题在于验证是初步的。因此,请单击安装验证器。有关该主题的更多信息,请访问:http://morevaadin.com/content/bean-validation-and-vaadin-comprehensive-example/
答案 1 :(得分:1)
要完成上面的示例,使用BeanFieldGroup,因为它有验证程序,您可以使用AbstractField的setValidationVisible方法关闭初步验证,然后在blurListener和按钮clickListeners中打开。
AbstractTextField cName = binder.buildAndBind("Name","name", AbstractTextField.class);
cName.setNullRepresentation("");
cName.setValidationVisible(false);
cName.addBlurListener(new MyBlurListener(cName)); //<-- turn on setValidationVisible there
myButton.addClickListener(event -> {
try {
cName.setValidationVisible(true);
binder.commit();
} catch (CommitException e){
Notification.show("Sending error");
}
});