4. Настройка взаимодействия между экранами
Пользователь должен иметь возможность изменять и сохранять базовое местоположение, щелкая на маркере карты. На данный момент наше приложение не предоставляет эту функциональность.
Перейдите к контроллеру экрана LocationLookupView и создайте методы setter и getter для передачи местоположения, которое мы хотим отобразить или сохранить.
public Location getSelected() {
    return selected;
}
public void setSelected(@Nullable Location selected) {
    this.selected = selected;
    currentLocationField.setValue(selected);
    if (selected != null) {
        setMapCenter(selected.getBuilding());
    }
}Перейдите к контроллеру экрана UserDetailView и найдите обработчик onLocationFieldSelect(). Наша цель - не только открыть диалог, но и передать ранее сохраненное местоположение для редактируемого пользователя. Кроме того, нам нужно получить результат из диалога после его закрытия. Давайте внесем необходимые изменения в обработчик:
@ViewComponent
private JmixValuePicker<Location> locationField;
@Subscribe("locationField.select")
public void onLocationFieldSelect(final ActionPerformedEvent event) {
    dialogWindows.view(this, LocationLookupView.class)
            .withAfterCloseListener(closeEvent -> {
                if (closeEvent.closedWith(StandardOutcome.SELECT)) {
                    locationField.setValue(closeEvent.getView().getSelected()); (1)
                }
            })
            .open()
            .getView()
            .setSelected(getEditedEntity().getLocation()); (2)
}| 1 | Объект AfterCloseEventсодержитCloseAction, переданный в методclose()экрана. Мы анализируем действие закрытия с помощью методаclosedWith()объекта события. Помните: в предыдущем разделе мы установили обработчик для действияselect. | 
| 2 | Передает местоположение редактируемого пользователя в setter LocationLookupView. | 
Запустите приложение и убедитесь, что взаимодействие между UserDetailView и LocationLookupView настроено правильно.