我的网格指的是MySQL数据库表。
this.grid = new Grid<>(Person.class, false);
然后,我为我的属性添加了列,还为一个渲染组件添加了一列,该组件链接到包含我的删除按钮的ui。
this.grid.addColumn(RenderedComponent.Renderer(DeleteButton::new))
因此,在网格的每一行中都有一个要删除的按钮。
我的问题是,我不知道如何获得引用按钮所在行的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();
}));