У меня возникли проблемы, когда я использую сетку Ваадина с BeanItemContainer. Он отображает строку ОК, но когда я пытаюсь сохранить отредактированную строку он бросает:Vaadin grid save отредактировал проблему вопроса
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 использует хэш-код каждого элемента для идентификации элемента. Итак, hashCode() MyBean основан на поле, которое изменяется после редактирования. Тогда элемент не был найден, и «id объекта не существует в контейнере» была выбрана ошибка. –
Ваш комментарий действительно помог мне поблагодарить вас – shinchillahh
То же самое здесь. +1. Я даже не думал о том, чтобы посмотреть на HashCode для этой ошибки. – cbmeeks