2

嗨,我刚刚启动 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 后不再起作用?

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

4

2 回答 2

2

您可能应该依赖 bean 验证本身并使用字段组。

我的模型如下所示:

@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/

于 2013-04-24T09:47:14.373 回答
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");
   }
});
于 2015-07-12T01:34:08.723 回答