4.3.3. Возврат значений из экрана
Методы, используемые для открытия экранов (openWindow()
, openLookup()
, openEditor()
), позволяют также и возвращать значения из этих экранов.
- Возврат значения из экрана выбора
-
Метод
openLookup()
позволяет задать обработчик для сущностей, выбранных в открываемом экране. В нашем примере, с помощью этого обработчика, реализованного лямбда-выражением, мы установим выбранного покупателя для редактируемого экземпляра сущностиOrder
.openLookup("sample$Customer.browse", items -> { if (!items.isEmpty()) { getItem().setCustomer((Customer) items.iterator().next()); } }, WindowManager.OpenType.DIALOG.setWidth("600px").setHeight("400px"));
- Возврат значения из произвольного экрана
-
Идея состоит в том, чтобы вернуть ссылку на контроллер открываемого экрана, и к этой ссылке добавить слушатель
CloseListener
, который будет обрабатывать значения после закрытия экрана.Экран OrderEdit демонстрирует два способа выбора сущности Customer: из экрана выбора (lookup) и из независимого экрана, и оба способа позволяют вернуть экземпляр
Customer
.Метод
openWindow()
в следующем примере открывает список покупателей в простом диалоговом окне. СлушательCloseWithCommitListener
получает сообщение о закрытии экрана действием сWindow.COMMIT_ACTION_ID
и устанавливает выбранного покупателя для редактируемого экземпляра сущностиOrder
.CustomerList window = (CustomerList) openWindow("customer-list", WindowManager.OpenType.DIALOG); window.addCloseWithCommitListener(() -> { getItem().setCustomer(window.getSelectedCustomer()); });