Vaadin 23.3.12中浏览器后退/前进时NavigationTrigger类型获取异常
问题分析与解决
在Vaadin 23.3.12中,你通过event.getLocationChangeEvent().getTrigger()获取导航触发源时得到CLIENT_SIDE而非预期的HISTORY,核心原因是**AfterNavigationEvent的getTrigger()方法和其内部LocationChangeEvent的getTrigger()指向的并非同一触发源标识**。
浏览器的前进/后退操作属于历史导航,Vaadin会将这类导航的触发源标记为NavigationTrigger.HISTORY,但该标识直接绑定在AfterNavigationEvent本身,而非嵌套的LocationChangeEvent中。后者的CLIENT_SIDE标识实际指代的是客户端发起的路由变更动作,并非具体的历史导航触发类型。
你需要修改代码,直接从AfterNavigationEvent获取触发源:
@Override public void afterNavigation(AfterNavigationEvent event) { final var trigger = event.getTrigger(); // 此时点击浏览器后退/前进,trigger应为NavigationTrigger.HISTORY ... }
另外需要注意,在Vaadin 23.x的部分场景中,如果你的路由配置包含嵌套视图或自定义客户端路由逻辑,可能会干扰触发源的判断,但直接使用event.getTrigger()是官方推荐的获取历史导航触发标识的方式。
内容的提问来源于stack exchange,提问作者gidravlic
相关产品推荐
相关产品推荐

