如何在Vaadin中编辑不可变对象列表?

时间:2019-04-14 10:09:40

标签: java vaadin immutability vaadin8

MyObj是不可变的,因此无法对其进行编辑,但是我应该能够在列表中交换它们。我应该如何实现?

这是我的Vaadin网格:

List<MyOBj> data = new ArrayList<>();
data.add(new MyObj(..));
data.add(new MyObj(..));
Grid<MyOBj> grid = new Grid<>(MyOBj.class);
grid.setItems(data);
grid.getEditor().setEnabled(true);
grid.addColumn(MyObj::someField).setCaption("someField");

MyObj可变吗,我将绑定编辑器:

Binder<MyOBj> binder = grid.getEditor().getBinder();
Binding<MyOBj, Boolean> binding = binder.bind(..binding setters/getter..);
column.setEditorBinding(binding);

现在我正在寻找这样的东西:

Binder<MyOBj> binder = grid.getEditor().getBinder();
Binding<MyOBj, Boolean> binding = binder.bind(..creating new Object and put on the given index of the list..);
column.setEditorBinding(binding);

有可能吗?

1 个答案:

答案 0 :(得分:1)

两个通用解决方案构成了我的主意:

  1. 定义在编辑对象时使用的可变DTO。用户保存所做的编辑后,您将根据DTO中的当前值创建一个新的不可变MyObj实例。
  2. 更改Binder,以编辑对MyObj的引用,而不是直接编辑MyOjb。尽管语义不匹配很小,但这样做的实用方法是进行Binder<AtomcReference<MyObj>>