Vaadin 网格保存编辑项问题

Vaadin grid save edited item issue

我在将 Vaadin 的网格与 BeanItemContainer 一起使用时遇到了一些问题。它显示行正常,但是当我尝试保存编辑的行时它抛出:

java.lang.IllegalArgumentException: Given item id (uz.sample.backend.entity.MyBean@4d949367) does not exist in the container
    at com.vaadin.ui.Grid$AbstractSelectionModel.checkItemIdExists(Grid.java:1367)
    at com.vaadin.ui.Grid$SingleSelectionModel.select(Grid.java:1457)
    at com.vaadin.ui.Grid$SingleSelectionModel.select(Grid.java:1442)

然后如果我再次点击保存按钮,它会抛出:

com.vaadin.data.fieldgroup.FieldGroup$CommitException: Property "organConductedCourse" not bound to datasource.
    at com.vaadin.data.fieldgroup.FieldGroup.startTransactions(FieldGroup.java:557)
    at com.vaadin.data.fieldgroup.FieldGroup.commit(FieldGroup.java:476)
    at com.vaadin.ui.Grid.saveEditor(Grid.java:6817)
    at com.vaadin.ui.Grid.save(Grid.java:4782)

我的代码是这样的:

Grid grid = new Grid();
grid.setSizeFull();
grid.setEditorEnabled(true);
BeanItemContainer<MyBean> container = new BeanItemContainer<>(MyBean.class);
container.addBean(new MyBean());
grid.setContainerDataSource(container);

我不知道我哪里做错了。也许你有什么想法。感谢您的任何建议!

再次搜索后,我找到了答案。我不得不使用 BeanContainer 而不是 BeanItemContainer。原来BeanItemContainer是用每个Item的hashCode来标识item的。所以,MyBeanhashCode() 是基于编辑后更改的字段。然后找不到项目并抛出"item id does not exist in the container"错误。(由于没有人回答这个问题,我把我的评论作为解决方案作为答案,我希望它能帮助别人)