如何在 Vaadin 中编辑不可变对象列表?
How do can I edit List of Immutable objects in Vaadin?
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);
这可能吗?
我想到了两个通用解决方案:
- 定义您在编辑对象时使用的可变 DTO。用户保存他们的编辑后,您将根据 DTO 中的当前值创建一个新的不可变
MyObj
实例。
- 更改
Binder
以编辑对 MyObj
的引用,而不是直接编辑 MyOjb
。这样做的一种实用方法是 Binder<AtomcReference<MyObj>>
. ,尽管语义不匹配很小。
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);
这可能吗?
我想到了两个通用解决方案:
- 定义您在编辑对象时使用的可变 DTO。用户保存他们的编辑后,您将根据 DTO 中的当前值创建一个新的不可变
MyObj
实例。 - 更改
Binder
以编辑对MyObj
的引用,而不是直接编辑MyOjb
。这样做的一种实用方法是Binder<AtomcReference<MyObj>>
. ,尽管语义不匹配很小。