最終的な解決策は次のようになりました。
grid.addListener(Events.AfterEdit, new Listener<GridEvent<BeanModel>>() {
@Override
public void handleEvent(GridEvent<BeanModel> be) {
try{
// get column where combo box is, in this case, column 2
if (be.getColIndex == 2) {
BeanModel m = be.getModel();
DataObjectInStore data = be.getBean();
// convert bean model to object if needed before saving to data
ValueObject v = (ValueObject) be.getValue();
data.setComboValue(v);
}
================================================== ================================
SimpleComboBox オブジェクトである CellEditor を作成しました。正常に動作しているように見えgrid.getStore().getModels()
ますが、データを取得して取得するときにステップが欠落しているようです。コンボ ボックスから選択した値はストアに保存されません。ストアに適切に保存するにはどうすればよいですか?
グリッド自体はかなり複雑です。同じことを行う簡略化されたバージョンを提供しようとします。
editor = new CellEditor(comboBox) {
@Override
public Object preProcessValue(Object value) {
if (value == null) {
return null;
}
return comboBox.findModel(null);
}
@Override
public Object postProcessValue(Object value) {
if (value == null) {
return null;
}
SimpleComboBox<BeanModel> bean = (SimpleComboBox<BeanModel>) value;
return bean.getValue().getBean();
}
};
configs.setEditor(editor) // configs = ColumnConfig
cm = new ColumnModel(configs);
grid = new Grid<BeanModel>(cm, store);
グリッドのストアは、文字列や dataObject などの変数を持つ GridDataObject の BeanModel です。dataObjectのcomboBox
BeanModel のコレクションです。dataObject には、データベース内のエントリを識別する ID と stringvalue を含む値があります。
前もって感謝します。