【问题标题】:Hook for a new `UI` starting in Vaadin 14从 Vaadin 14 开始挂钩新的“UI”
【发布时间】:2019-12-24 07:09:16
【问题描述】:

Vaadin 14 手册中的Navigation Lifecycle 说:

还可以使用UI 中的addBeforeEnterListener(BeforeEnterListener) 方法为此事件注册一个独立的侦听器。

但是在具有路由功能的现代 Vaadin 中,我们不再应该编写 UI 子类。我粗略的理解是确实有一个UI对象为我们自动实例化,然后路由自动替换了那个UI对象里面的内容。所以UI 对象的存在对于我们使用 Vaadin Flow 的程序员来说应该是透明的。

➥ 那么新的UI 实例上的生命周期挂钩是什么,以便我可以将用户身份验证检查编写为BeforeEnterListener 以在我的所有@Route 视图中全局工作?

调用UI.getCurrent 不行,因为我需要从我的布局中的某个地方调用它,但我试图在我的布局存在之前注册一个监听器

【问题讨论】:

  • 注意 UI 的行为和目的在最近的 Vaadin 中发生了巨大变化。 UI 对象不一定在您的窗口/选项卡打开的整个过程中都是稳定的。 UI 对象被替换,莫名其妙,有时非常迅速。您不应再在 UI 对象上存储窗口/选项卡范围的对象。有关更多讨论,请参阅 Vaadin 论坛。

标签: user-interface vaadin hook lifecycle vaadin-flow


【解决方案1】:

要连接到 UI 初始化,可以使用 UIInitListener

每次创建和初始化新 UI 时,都可以使用 UIInitListener 接收事件。

添加 UIInitListeners 的理想位置是在 VaadinServiceInitListener

例如使用 Springboot:

@Bean
VaadinServiceInitListener vaadinServiceInitListener() {
    return new VaadinServiceInitListener() {
        @Override
        public void serviceInit(ServiceInitEvent serviceInitEvent) {
            serviceInitEvent.getSource().addUIInitListener( initEvent -> System.out.println("UI Init for " + initEvent.getUI()));
        }
    };
}

【讨论】:

  • 仅供参考:如需实际使用此处显示的 UIInitListener,请参阅 Vaadin 论坛上的 my thread
猜你喜欢
  • 2018-06-15
  • 2023-03-30
  • 1970-01-01
  • 2018-02-03
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多