Займемся задачей отображения списка заказов в окне редактирования покупателя.
Перейдите в секцию Generic UI. Откройте на редактирование экран customer-edit.xml
.
Перейдите на вкладку Designer.
В группе Data components в палитре компонентов найдите Collection и перетащите его в секцию data в иерархии компонентов экрана.
Для контейнера выберите сущность com.company.sales.entity.Order
и её представление _local
. Сгенерируйте loader ID с помощью кнопки .
Добавьте параметр WHERE в сгенерированный запрос JPQL, чтобы загружать только те заказы, которые имеют ссылку на нужного нам покупателя:
select e from sales_Order e where e.customer = :customer
В итоге у вас должен получиться следующий data container для загрузки экземпляров сущности Order
:
link:../../../../source/qs/ordersCt.xml[role=include]
Далее, в палитре компонентов найдите компонент Label
. Перетащите этот компонент на панель иерархии компонентов экрана между элементами form
и editActions
. Перейдите на вкладку Properties на панели свойств. В поле value введите значение компонента: Orders
.
Tip
|
Если разрабатываемое приложение предполагает локализацию на несколько языков, используйте кнопку рядом с полем value, чтобы создать новое сообщение |
Перетащите компонент Table
из палитры компонентов на панель иерархии компонентов между label
и editActions
. Выделите компонент в иерархии и перейдите на вкладку Properties. Задайте размеры таблицы: в поле width укажите 300px
, в поле height установите значение 200px
. Из списка доступных источников данных выберите контейнер ordersDc
, после этого в поле id с помощью кнопки сгенерируйте идентификатор таблицы: ordersTable
.
В контекстном меню таблицы выберите Wrap Into > Group Box. Перейдите на вкладку Properties контейнера groupBox
на панели свойств и введите Orders
в поле caption, в поле width укажите 320px
.
В итоге дескриптор экрана customer-edit.xml
на вкладке Text будет выглядеть следующим образом:
link:../../../../source/qs/customer-edit.xml[role=include]
Откройте контроллер экрана CustomerEdit
. Кнопки и на панели с номерами строк помогут вам быстро переключаться между дескриптором и контроллером экрана.
Для начала давайте отключим автоматическую загрузку данных. Для этого удалите аннотацию @LoadDataBeforeShow
из исходного кода.
Инжектируйте loader для заказов в класс контроллера:
@Inject
private CollectionLoader<Order> ordersDl;
Затем подпишитесь на событие BeforeShowEvent
, чтобы указать значение параметра customer
в запросе ordersDl
. Это можно сделать, нажав Alt+Insert и выбрав Subscribe to Event в появившемся меню Generate.
link:../../../../source/qs/CustomerEdit.java[role=include]
Этот метод будет загружать связанные экземпляры сущности Order
.