Как я могу редактировать список неизменяемых объектов в Vaadin? - PullRequest
1 голос
/ 14 апреля 2019

MyObj является неизменяемым, поэтому редактировать их невозможно, однако я должен иметь возможность поменять их местами в списке. Как мне этого добиться?

Вот моя сетка Ваадина:

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 Ответ

1 голос
/ 15 апреля 2019

Два общих решения формируют вершину моего ума:

  1. Определите изменяемый DTO, который вы используете во время редактирования объекта. Как только пользователь сохраняет свои изменения, вы создаете новый неизменный экземпляр MyObj на основе текущих значений в DTO.
  2. Измените Binder для редактирования ссылки на MyObj вместо прямого редактирования MyOjb. Практический способ сделать это, хотя и с небольшим семантическим несоответствием, это сделать Binder<AtomcReference<MyObj>>.
...