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());
});