Skip to content

Latest commit

 

History

History
47 lines (36 loc) · 3.24 KB

oto_single_editor.adoc

File metadata and controls

47 lines (36 loc) · 3.24 KB

Композиция One-to-One в одном редакторе

Сущности, связанные композицией с типом один-к-одному, часто бывает удобно создавать в одном общем экране редактирования. Рассмотрим, как можно реализовать такой экран, на примере отношений сущностей 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]

Теперь обе сущности можно создавать и редактировать в одном экране.