Vaadin 14 - 使用渲染的删除按钮删除网格的一行

1 java vaadin

我的网格指的是 MySQL 数据库表。

this.grid   = new Grid<>(Person.class, false);
Run Code Online (Sandbox Code Playgroud)

然后,我添加了属性列,以及链接到包含删除按钮的 ui 的渲染组件列。

this.grid.addColumn(RenderedComponent.Renderer(DeleteButton::new))
Run Code Online (Sandbox Code Playgroud)

因此,网格的每一行都有一个要删除的按钮。

我的问题是我不知道如何获取引用按钮所在行的 bean。因为当我有了这个时,我希望可以通过单击按钮来完成此操作:

new PersonDAO().remove(bean);
Run Code Online (Sandbox Code Playgroud)

然后刷新网格。

Kas*_*rer 6

在列渲染器内,您可以访问该项目。您只是还没有使用它来创建按钮。代替

this.grid.addColumn(RenderedComponent.Renderer(DeleteButton::new))
Run Code Online (Sandbox Code Playgroud)

你可以这样做

this.grid.addComponentColumn(item -> new DeleteButton(item));
Run Code Online (Sandbox Code Playgroud)

并更改您的DeleteButton类以期望构造函数中包含该项目。您现在可以使用该项目将其从点击侦听器内的数据库中删除

如果您还想刷新网格,您还必须知道点击侦听器内的网格。将网格也传递到DeleteButton 中,或者您可以在DeleteButton 类之外定义clicklistener。这可能会使您的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();
}));
Run Code Online (Sandbox Code Playgroud)