Сущности, связанные композицией с типом один-к-одному, часто бывает удобно создавать в одном общем экране редактирования. Рассмотрим, как можно реализовать такой экран, на примере отношений сущностей Customer и CustomerDetails.
-
customer-edit.xml содержит основной источник данных
customerDs
и вложенный в негоdetailsDs
:link:../../../../source/cookbook/oto_single_editor.xml[role=include]
Поля для редактирования обеих сущностей сгруппированы в один компонент
fieldGroup
, где отдельные поля привязаны к вложенному источнику данных:link:../../../../source/cookbook/oto_single_editor_2.xml[role=include]
-
В контроллере экрана CustomerEdit мы переопределяем метод
initNewItem()
. В нём создаём новый экземплярCustomerDetails
и связываем его с только что созданным экземпляромCustomer
:link:../../../../source/cookbook/oto_single_editor_3.java[role=include]
Напоследок обработаем ситуацию, когда пользователь нажимает Create, а затем закрывает редактор экрана без каких-либо изменений в полях покупателя. По умолчанию, пользователю будет предложено сохранить или отменить изменения, так как
detailsDs
уже содержит пустой экземплярCustomerDetails
, а значит, методisModified()
вернётtrue
. Чтобы предотвратить появление такого диалога для пустых сущностей, заставим методisModified()
принимать во внимание только изменения в главном источнике данных экрана:link:../../../../source/cookbook/oto_single_editor_4.java[role=include]
Теперь обе сущности можно создавать и редактировать в одном экране.