2016-07-04 12 views
0

私はVaadin(7.6.7)のグリッドを持っています。これはエディタモードのときにコンボボックスを表示します。別のアクションでは、コンボボックスの項目を変更できますが、グリッド内のコンボボックスは更新されません。グリッド内のVaadinのコンボボックスの値を更新します

public void setComboBoxAsEditor(Grid grid) { 
    grid.getColumn("id").setEditorField(theBox).setConverter(new Converter<String, String>() { 
    @Override 
    public String convertToModel(String value, Class<? extends String> targetType, Locale locale) throws ConversionException { 
     return value; // not sure for what this is required 
    } 

    @Override 
    public String convertToPresentation(String value, Class<? extends String> targetType, Locale locale) throws ConversionException { 
     // don't show the id, but the name 
     A a = endpoint.getA(value); 
     return a.getName(); 
    } 

    @Override 
    public Class<String> getModelType() { 
     return String.class; 
    } 

    @Override 
    public Class<String> getPresentationType() { 
     return String.class; 
    } 
}); 
} 

theBox前に充填されるコンボボックスである - 初期表示が正しい(それはタイプAのオブジェクトが含ま)

今別のアクションは、例えば、タイプAのオブジェクトを操作しますオブジェクトを削除する。

グリッド内でコンボボックスを更新するにはどうすればよいですか?

私は前にコールする

public void upateCombobox() { 
theBox.removeAllItems(); 
List<A> as = endpoint.getAs(); 
theBox.setContainerDataSource(new BeanItemContainer<>(String.class, as.stream().map(A::getIdent).collect(Collectors.toList()))); 
for (A each : as) { 
    theBox.setItemCaption(a.getId(), a.getName()); 
} 
} 

を試してみましたが、グリッドを編集するとき、theBoxはまだ古い値を示しています。

私はgrid.getColumn("id").getEditorField().markAsDirty()を呼び出そうとしましたが、また、変更なし

私は何を欠場か?

+0

変換メソッド 'convertToModel'はわかりません。これは "id"カラムに書き込むときに呼び出されます。 'A.getName()'をモデルに戻します。ただし、これはあなたの問題である動作に影響しません。たぶんあなたはタイプミスがあります。コンテナのデータソースを 'theBox'ではなく' teamBox'に設定しましたか? –

+0

'convertToModel'について - それは何もせずに動作すると思われ、また全く呼び出されないようです(?)。そしてはい、タイプミスがありました。 'theBox'は' Combobox'で、これでアイテムを更新します。 –

+0

'theBox.getContainerDataSource()。getItemIds()。forEach(System.out :: println);'を更新メソッドに追加すると、 'theBox'は正しいオブジェクトを正しく持っています。アップデートされました –

答えて

0

私は答えを見つけました。この

public void update() { 
    updateCombobox(); 
} 

は、今ではそのため、この

public void update() { 
    createCombobox(); // this creates a new reference to theBox 
    setComboboxAsEditor(); 
} 

のように見えるように

私の更新方法を見て、私は、これを設定し、theBoxの新しいインスタンスを作成し、updateCombobox内のデータとそれを埋めます列の新しいエディタフィールド。

その正しさについてはわかりませんが、それは動作します。

関連する問題