Проблема такая что у нас есть свой аддон. Многие экраны там сейчас открываются в диалоге для передачи dataContext
(1 главный экран в котором происходит сохранение открывает подэкраны в которых происходит редактирование сущностей).
Хотели в аддон добавить возможность открытия таких подэкранов в табе или в том же экране. Где появляется список открытых экранов по типу.
То есть в аддоне есть проверка
public static Component getParentWindow(Component component) {
if (component == null) return null;
Component parent = component.getParent().orElse(null);
if (parent instanceof StandardMainView || parent instanceof Dialog) return parent;
else return getParentWindow(parent);
}
public static boolean isTabbedMenu(View view) {
Component window = getParentWindow(view);
return window instanceof StandardTabbedModeMainView;
}
(Не уверен что такое работает. Не тестил еще)
В общем логика такая что если isTabbedMenu = true
то открываем экраны через
viewBuilders.detail(this, Entity.class, EntityEditScreen.class)
.editEntity(entity)
.withParentDataContext(dataContext)
.withOpenMode(ViewOpenMode.THIS_TAB)
Если isTabbedMenu = false
то.
dialogWindows.detail(this, Entity.class)
.withViewClass(EntityEditScreen.class)
.editEntity(entity)
.withParentDataContext(dataContext)
Но при добавлении в наш аддон стартер jmix-tabbedmode-flowui-starter
и при запуске приложения с аддон в обычном меню падает ошибка
java.lang.ClassCastException: com.demo.view.main.MainView cannot be cast to class io.jmix.tabbedmode.app.main.StandardTabbedModeMainView (com.demo.view.main.MainView and io.jmix.tabbedmode.app.main.StandardTabbedModeMainView are in unnamed module of loader 'app')
at io.jmix.tabbedmode.xml.layout.loader.TabbedModeMainViewLoader.createContent(TabbedModeMainViewLoader.java:51) ~[jmix-tabbedmode-flowui-2.5.0.jar:na]
at io.jmix.flowui.xml.layout.loader.LayoutLoader.createViewContent(LayoutLoader.java:140) ~[jmix-flowui-2.5.0.jar:na]
at io.jmix.flowui.sys.ViewSupport.loadWindowFromXml(ViewSupport.java:448) ~[jmix-flowui-2.5.0.jar:na]
at io.jmix.flowui.sys.ViewSupport.initView(ViewSupport.java:123) ~[jmix-flowui-2.5.0.jar:na]
at io.jmix.flowui.sys.vaadin.JmixSpringInstantiator.init(JmixSpringInstantiator.java:65) ~[jmix-flowui-2.5.0.jar:na]
at io.jmix.flowui.sys.vaadin.JmixSpringInstantiator.getOrCreate(JmixSpringInstantiator.java:58) ~[jmix-flowui-2.5.0.jar:na]
at io.jmix.tabbedmode.Views.createInternal(Views.java:129) ~[jmix-tabbedmode-flowui-2.5.0.jar:na]
at io.jmix.tabbedmode.Views.create(Views.java:117) ~[jmix-tabbedmode-flowui-2.5.0.jar:na]
at io.jmix.tabbedmode.Views.create(Views.java:123) ~[jmix-tabbedmode-flowui-2.5.0.jar:na]
at io.jmix.tabbedmode.builder.AbstractViewBuilderProcessor.createView(AbstractViewBuilderProcessor.java:42) ~[jmix-tabbedmode-flowui-2.5.0.jar:na]
at io.jmix.tabbedmode.builder.ViewBuilderProcessor.build(ViewBuilderProcessor.java:35) ~[jmix-tabbedmode-flowui-2.5.0.jar:na]
at io.jmix.tabbedmode.builder.AbstractViewBuilder.build(AbstractViewBuilder.java:114) ~[jmix-tabbedmode-flowui-2.5.0.jar:na]
at io.jmix.tabbedmode.builder.AbstractViewBuilder.open(AbstractViewBuilder.java:120) ~[jmix-tabbedmode-flowui-2.5.0.jar:na]
at io.jmix.tabbedmode.builder.navigation.TabbedModeViewNavigationProcessor.processNavigation(TabbedModeViewNavigationProcessor.java:55) ~[jmix-tabbedmode-flowui-2.5.0.jar:na]
at io.jmix.tabbedmode.builder.navigation.TabbedModeViewNavigationProcessor.processNavigation(TabbedModeViewNavigationProcessor.java:32) ~[jmix-tabbedmode-flowui-2.5.0.jar:na]
at io.jmix.flowui.view.navigation.AbstractViewNavigator.navigate(AbstractViewNavigator.java:164) ~[jmix-flowui-2.5.0.jar:na]
at io.jmix.securityflowui.authentication.LoginViewSupport.navigateToMainView(LoginViewSupport.java:344) ~[jmix-security-flowui-2.5.0.jar:na]
at io.jmix.tabbedmode.security.authentication.TabbedModeLoginViewSupport.showInitialView(TabbedModeLoginViewSupport.java:47) ~[jmix-tabbedmode-flowui-2.5.0.jar:na]
at io.jmix.securityflowui.authentication.LoginViewSupport.onSuccessfulAuthentication(LoginViewSupport.java:245) ~[jmix-security-flowui-2.5.0.jar:na]
at io.jmix.securityflowui.authentication.LoginViewSupport.authenticate(LoginViewSupport.java:210) ~[jmix-security-flowui-2.5.0.jar:na]
at com.demo.view.login.LoginView.onLogin(LoginView.java:90) ~[main/:na]