Vaadin 14 - удалить строку сетки с помощью обработанной кнопки удаления - PullRequest
1 голос
/ 24 октября 2019

Моя сетка ссылается на таблицу базы данных MySQL.

this.grid   = new Grid<>(Person.class, false);

Затем я добавил столбцы для моих атрибутов, а также столбец для визуализированного компонента, который связан с пользовательским интерфейсом и содержит мою кнопку удаления.

this.grid.addColumn(RenderedComponent.Renderer(DeleteButton::new))

Таким образом, в каждом ряду сетки есть одна кнопка для удаления.

Моя проблема в том, что я не знаю, как получить бин, который ссылается на строку, в которой находится кнопкаявляется. Потому что, когда у меня это будет, я надеюсь, что смогу сделать это по нажатию кнопки:

new PersonDAO().remove(bean);

и затем обновить сетку.

1 Ответ

2 голосов
/ 24 октября 2019

Внутри колонки рендерера у вас есть доступ к предмету. Вы просто еще не используете его для создания кнопки. Вместо

this.grid.addColumn(RenderedComponent.Renderer(DeleteButton::new))

Вы можете сделать это

this.grid.addComponentColumn(item -> new DeleteButton(item));

и изменить свой класс DeleteButton так, чтобы он ожидал этого элемента в конструкторе. Теперь вы можете использовать этот элемент, чтобы удалить его из базы данных внутри прослушивателя щелчков

Если вы также хотите обновить сетку, вам также необходимо знать сетку внутри прослушивателя кликов. Либо передайте сетку тоже в DeleteButton, либо вы можете определить список щелчков вне класса DeleteButton. Это, вероятно, сделает ваш класс DeleteButton устаревшим, за исключением случаев, когда он имеет какой-либо пользовательский стиль или другие улучшения.

// using Button instead of DeleteButton for clarity
this.grid.addComponentColumn(item -> new Button("Delete", click -> {
    this.personDao.remove(item); // NEVER instantiate your service or dao yourself, instead inject it into the view
    this.grid.getDataProvider().refresh();
}));
...