如何在 Mono.subscribe 中使用 UI.getCurrent().navigate( "route" )


public void onAlfrescoTicketReceived(Mono<Ticket> ticket) {
ticket
.log()
.subscribe(
consumer -> {
this.sessionService.setTicket(consumer.getTicket());
UI.getCurrent().navigate("route");
});
}

会话服务有效,但 UI.getCurrent 返回空值。有没有办法在订阅中导航?

它可能在后台线程中执行。UI.getCurrent()仅在 UI 线程中工作。

您需要在仍在 UI 线程中的某个点存储对 UI 的引用,或者通过在附加的组件上调用getUI()来存储对 UI 的引用。如果您的方法在 UI 线程中执行,则可以将引用存储在其中。然后调用UI#access来执行任何 UI 任务:

public void onAlfrescoTicketReceived(Mono<Ticket> ticket) {
UI ui = UI.getCurrent();
ticket
.log()
.subscribe(
consumer -> {
this.sessionService.setTicket(consumer.getTicket());
ui.access(() -> ui.navigate("route"));
});
}

从后台线程调用时使用UI#access可确保会话被锁定,以便 UI 状态中不会出现任何冲突。它还确保UI.getCurrent()VaadinSession.getCurrent()返回正确的值。

相关内容

  • 没有找到相关文章

最新更新