2017-04-06 7 views
0

私はVaadinでコンボボックスの値を検証しようとしています。私の目標は、選択されたオブジェクトの 'my​​IntegerAttribute'フィールドをnullに設定してフォームをコミットしないようにすることです。コンボボックスには「MyBean」クラスオブジェクトが格納されていることを確認します。Vaadinのコンボボックスの検証

"FilterableListContainer"を使用してデータをバインドしています。 私はこれを試してみましたが、バリデータが解雇されていないようです:

List<MyBean> myBeans = getMyBeansList(); 
FilterableListContainer filteredMyBeansContainer = new FilterableListContainer<MyBean>(myBeans); 
comboBox.setContainerDataSource(filteredMyBeansContainer); 
comboBox.setItemCaptionPropertyId("caption"); 
... 
comboBox.addValidator(getMyBeanValidator("myIntegerAttribute")); 
... 
private BeanValidator getMyBeanValidator(String id){ 
    BeanValidator validator = new BeanValidator(MyBean.class, id);//TrafoEntity 
    return validator; 
} 

class MyBean { 
    String caption; 
    Integer myIntegerAttribute; 
    ... 
} 

私はコンボボックスにnull値を選択しないようにしたくありません。

null値をコミットしないようにするにはどうすればよいですか? BeanValidator君を利用して、ユーザの選択に対応するオブジェクトのメンバーがnullのとき

NullValidator nv = new NullValidator("Cannot be null", false); 
    comboBox.addValidator(nv); 

が検証に失敗する:

+0

フォームにバインダーを使用しているのか、コンポーネントをレイアウトに手動で追加していますか? 「コミットする」部分を含む完全なコードを表示すると、シナリオの理解に役立ちます。 – Morfic

+0

はい、メインの投稿に詳細を追加しました。 – Ortzi

答えて

0

私は間違った方法でバリデーターを実装していました。

public class MyBeanValidator implements Validator { 
    @Override 
    public void validate(Object value) throws InvalidValueException { 
     if (!isValid(value)) { 
      throw new InvalidValueException("Invalid field"); 
     } 
    } 
    private boolean isValid(Object value) { 
     if (value == null || !(value instanceof MyBean) 
       || ((MyBean) value).getMyIntegerAttribute() == null) { 
      return false; 
     } 
     return true; 
    } 
} 

そしてコンボボックスでそれを使用::私は、Vaadinの「バリ」クラスを実装するクラスを作成し

combobox.addValidator(new MyBeanValidator()); 

は答えてくれてありがとう!

+0

BeanValidatorを使用したくない場合は、確かにその方法の1つです。 –

1

Vaadin 7では、ユーザーの選択がnullのとき、検証が失敗するNullValidatorを使用します

public class MyBean { 

    String caption; 

    @NotNull 
    int myIntegerAttribute; 

    // etc... 
} 

あなたはViritinからFilterableListContainerを使用しています:Beanクラスの@NotNull JSR-303注釈を含めるでしょうか?なぜそれがバリデータの使用を妨げているのか分かりませんが、コンボボックスでなぜそれを使用しているのか説明できますか?

+0

コンボボックスの値は決してnullではないので、null値は 'MyClass'型オブジェクトの 'my​​IntegerAttribute'プロパティになる可能性があります。 FilterableListContainerを使用してフォームのフィールドに 'myBean'の値をバインドします(明らかにコンボボックスとは別のフィールドがあります)。私はあなたが言ったように問題がそれに関連していると思う。 – Ortzi

+0

@Ortzi:null Beanメンバーを処理する方法を含むように答えが更新されました。 –

関連する問題