我在使用Vaadin的網格與BeanItemContainer時遇到了一些問題。它顯示的一行行,但是當我嘗試保存編輯後的行會拋出:Vaadin網格保存編輯項目問題
java.lang.IllegalArgumentException: Given item id ([email protected]) 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<MyBean> container = new BeanItemContainer<>(MyBean.class); container.addBean(new MyBean()); grid.setContainerDataSource(container);
我不知道我在哪裏做錯了。也許你有什麼想法。感謝您的任何建議!
我再次搜索後發現了一個答案。我不得不使用BeanContainer而不是BeanItemContainer。事實證明,BeanItemContainer使用每個Item的hashCode來標識該項目。所以,MyBean的hashCode()是基於編輯後更改的字段。然後找不到項目,並且「容器中不存在項目標識」錯誤被拋出。 –
您的評論真的幫助我,謝謝 – shinchillahh
同樣在這裏。 +1。我甚至沒有考慮過看這個錯誤的HashCode。 – cbmeeks