Vaadin 7验证(BeanValidator和setrequired)

时间:2013-04-23 12:23:32

标签: vaadin validation bean-validation

您好我刚刚开始使用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不再有效吗?

这是一个限制吗? 我该如何解决它?

2 个答案:

答案 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");
   }
});