Vaadin:以编程方式设置推送传输

问题描述 投票:0回答:1

在 Vaadin 中,可以在启动时在推送注释中指定传输协议。

@Push(transport = Transport.LONG_POLLING)

工作正常,但我想检查 UIInit 中的 URI 实例并相应地设置此传输。我们面临的问题是,并非所有连接都允许我们使用 websocket,因此我们最终需要切换回长轮询。 Vaadin 中应该有一种自动机制,应该回退,但似乎不起作用。

有办法设置吗?它不需要随着时间的推移而改变。一个 UI 可以坚持一种传输,但我无法在注释中对其进行硬编码。

vaadin vaadin24
1个回答
0
投票

使用 Vaadin 24,您可以使用以下解决方法。创建一个 VaadinServiceInitListener 并使用

@Push
注释禁用推送,然后启用它并在 UI 的
BeforeEnterListener
中设置传输:

@Push(value = PushMode.DISABLED, transport = Transport.LONG_POLLING)
public class AppShell implements AppShellConfigurator, VaadinServiceInitListener {
    @Override
    public void serviceInit(ServiceInitEvent event) {
        event.getSource().addUIInitListener(uiEvent -> {
            uiEvent.getUI().addBeforeEnterListener(attachEvent -> {
                UI ui = attachEvent.getUI();
                Transport transport = useWebSocket()?transport = Transport.WEBSOCKET:transport = Transport.LONG_POLLING;
                ui.getPushConfiguration().setTransport(transport); 
                ui.getPushConfiguration().setPushMode(PushMode.AUTOMATIC);
            });
        });
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.