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的。所以,MyBean
的 hashCode()
是基于编辑后更改的字段。然后找不到项目并抛出"item id does not exist in the container"错误。(由于没有人回答这个问题,我把我的评论作为解决方案作为答案,我希望它能帮助别人)
我在将 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的。所以,MyBean
的 hashCode()
是基于编辑后更改的字段。然后找不到项目并抛出"item id does not exist in the container"错误。(由于没有人回答这个问题,我把我的评论作为解决方案作为答案,我希望它能帮助别人)