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 に答える