Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Vaadin网格保存已编辑的项目问题_Java_Vaadin7 - Fatal编程技术网

Java Vaadin网格保存已编辑的项目问题

Java Vaadin网格保存已编辑的项目问题,java,vaadin7,Java,Vaadin7,我在使用BeanItemContainer的Vaadin网格时遇到了一些问题。它显示一行OK,但当我尝试保存编辑的行时,它会抛出: java.lang.IllegalArgumentException: Given item id (uz.sample.backend.entity.MyBean@4d949367) does not exist in the container at com.vaadin.ui.Grid$AbstractSelectionModel.checkItemI

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

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$1.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$4.save(Grid.java:4782)
然后,如果我再次单击“保存”按钮,它会抛出:

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$1.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$4.save(Grid.java:4782)
我的代码是这样的:

Grid Grid=new Grid();
grid.setSizeFull();
grid.setEditorEnabled(true);
BeanItemContainer=新的BeanItemContainer(MyBean.class);
addBean(newmyBean());
grid.setContainerDataSource(容器);

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

我再次搜索后找到了答案。我不得不使用
BeanContainer
而不是
BeanItemContainer
。原来,
BeanItemContainer
使用每个项目的hashCode来标识项目。因此,
MyBean
hashCode()
基于编辑后更改的字段。然后未找到项目,并抛出“容器中不存在项目id”错误。(由于没有人回答此问题,我将我的评论作为解决方案,希望它能帮助其他人)

再次搜索后,我找到了答案。我不得不使用BeanContainer而不是BeanItemContainer。事实证明,BeanItemContainer使用每个项目的哈希代码来标识该项目。因此,MyBean的hashCode()基于编辑后更改的字段。然后没有找到项目,抛出了“容器中不存在项目id”错误。您的评论真的帮助了我,谢谢您+1.我甚至没有想到要查看这个错误的哈希代码。非常感谢!通过编辑hashCode()-方法以使用对象上的两个标识符,我仍然能够使用BeanItemContainer。你刚刚解决了三个问题。你让我开心!