私は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()
を呼び出そうとしましたが、また、変更なし
私は何を欠場か?
変換メソッド 'convertToModel'はわかりません。これは "id"カラムに書き込むときに呼び出されます。 'A.getName()'をモデルに戻します。ただし、これはあなたの問題である動作に影響しません。たぶんあなたはタイプミスがあります。コンテナのデータソースを 'theBox'ではなく' teamBox'に設定しましたか? –
'convertToModel'について - それは何もせずに動作すると思われ、また全く呼び出されないようです(?)。そしてはい、タイプミスがありました。 'theBox'は' Combobox'で、これでアイテムを更新します。 –
'theBox.getContainerDataSource()。getItemIds()。forEach(System.out :: println);'を更新メソッドに追加すると、 'theBox'は正しいオブジェクトを正しく持っています。アップデートされました –