Сохранение данных при переходе в другую вкладку в Jmix

У меня есть Jmix приложение, в нём есть три вкладки в приложении, и если в одной вкладке я набираю текст в поля, и перехожу в другую вкладку, приложение переоткрывает вкладку, и данные стираются. Как сделать так, чтобы при переходе в другую вкладку, вкладка не переоткрывалась, а открывалась предыдущая и данные оставались.

Добрый день!

Можете, пожалуйста, добавить чуть больше контекста и примера? По умолчанию переключаясь между вкладками внутри приложения данные остаются.

maintabsheet

У меня есть открытая вкладка экрана, я повторно нажимаю в меню на пункт отвечающий за этот экран, экран переоткрывается. А мне нужно, чтобы ранее открытая вкладка экрана получала фокус. А уж если открытой вкладки нет, чтобы открывалась снова.

Стандартные средства не позволяют выбирать вкладку с открытым экраном по нажатию из меню. Есть возможность открывать новый, через аннотацию @MultipleOpen (см. Аннотации контроллеров :: Документация Jmix), либо оставить дефолтное поведение.

Более сложный и не очень надёждный вариант переопределить бин MenuItemCommands, отвечающий за нажатие по элементу меню. В нём проверять открыт ли экран, и если открыт выбрать эту вкладку.

Расширенный MenuItemCommands
@Primary
@Component("app_ExtMenuItemCommands")
public class ExtMenuItemCommands extends MenuItemCommands {

    @Override
    protected MenuItemCommand createScreenCommand(FrameOwner origin, MenuItem item) {
        return new ExtMenuItemCommand(origin, item, item.getScreen(), item.getDescriptor());
    }

    protected class ExtMenuItemCommand extends ScreenCommand {

        public ExtMenuItemCommand(FrameOwner origin, MenuItem item, String screen, Element descriptor) {
            super(origin, item, screen, descriptor);
        }

        @Override
        public void run() {
            Screens screens = getScreenContext(origin).getScreens();

            List<UiControllerProperty> controllerProperties = convertToUiControllerProperties(item.getProperties());

            WindowInfo windowInfo = windowConfig.getWindowInfo(this.screen);
            Screen screen = createScreen(windowInfo, this.screen, controllerProperties);

            Screens.OpenedScreens openedScreens = screens.getOpenedScreens();

            Screens.WindowStack windowStack = openedScreens.getWorkAreaStacks().stream()
                    .filter(ws -> isAlreadyOpened(screen, Iterables.getLast(ws.getBreadcrumbs())))
                    .findFirst()
                    .orElse(null);

            if (windowStack != null) {
                windowStack.select();
                return;
            }

            super.run();
        }
    }
}