当Screen显示到系统的主TabPanel后,用户切换标签页时,在Screen里面怎么能在标签页选中后触发一个事件,试过onAfterShow、onBeforeShow都不触发了
试一下这个事件 WorkAreaTabChangedEvent
,这是一个标准的 SpringApplicationEvent
不大会用,能给个示例吗?这个事件只能获得选中的sheet,怎么和sheet里自己的Screen关联起来呢?
两种方式:
- 试试
WebAppWorkArea.getCurrentWindowContainer()
方法 - 自定义一个
com.haulmont.cuba.gui.events.UiEvent
类型的事件,比如:“TabChangedEvent”,然后在界面控制器中监听这个事件,监听的方法与标准的 SpringApplicationEvent 一样。
protected TabWindowContainer getCurrentWindowContainer()
是个受保护的方法,外面获得不了
我是这样获得的,麻烦看下对不对,这是一个TAB里还可能多个SCREEN么
Optional optional= ((WebAppWorkArea)event.getWorkArea()).getCurrentBreadcrumbs().stream().findFirst();
要不这样获取吧:
AppUI.getCurrent().getScreens().getOpenedScreens().getCurrentBreadcrumbs().stream().distinct().findFirst().get()
因为 CUBA 的界面是有父子关系的,比如从 browser 界面打开 editor 界面,这里 editor界面和 browser界面是在一个 tab中的。所以需要使用 getCurrentBreadcrumbs() 来获取当前tab中的界面。
哦,那获取第一个应该就是主窗体了,对吧
是的,动手试试会印象深刻