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

Java Vaadin 14-使用“渲染删除”按钮删除网格中的一行,java,vaadin,Java,Vaadin,我的网格指的是一个MySQL数据库表 this.grid = new Grid<>(Person.class, false); 因此,在网格的每一行中都有一个要删除的按钮 我的问题是,我不知道如何获取引用按钮所在行的bean。 因为当我有了它,我希望能在点击按钮时做到这一点: new PersonDAO().remove(bean); 然后刷新网格。在列渲染器中,您可以访问该项。您只是还没有使用它来创建按钮。而不是 this.grid.addColumn(RenderedCo

我的网格指的是一个MySQL数据库表

this.grid   = new Grid<>(Person.class, false);
因此,在网格的每一行中都有一个要删除的按钮

我的问题是,我不知道如何获取引用按钮所在行的bean。 因为当我有了它,我希望能在点击按钮时做到这一点:

new PersonDAO().remove(bean);

然后刷新网格。

在列渲染器中,您可以访问该项。您只是还没有使用它来创建按钮。而不是

this.grid.addColumn(RenderedComponent.Renderer(DeleteButton::new))
你可以这样做

this.grid.addComponentColumn(item -> new DeleteButton(item));
并将
DeleteButton
类更改为在构造函数中预期该项。现在可以使用该项从单击侦听器中的数据库中删除它

如果您还想刷新网格,还必须知道clicklistener中的网格。将网格也传递到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();
}));

在列渲染器中,您可以访问该项。您只是还没有使用它来创建按钮。而不是

this.grid.addColumn(RenderedComponent.Renderer(DeleteButton::new))
你可以这样做

this.grid.addComponentColumn(item -> new DeleteButton(item));
并将
DeleteButton
类更改为在构造函数中预期该项。现在可以使用该项从单击侦听器中的数据库中删除它

如果您还想刷新网格,还必须知道clicklistener中的网格。将网格也传递到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();
}));