gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:34:41 27 4
gpt4 key购买 nike

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

sessionService 可以工作,但 UI.getCurrent 返回 null。有没有办法在订阅内导航?

最佳答案

它可能是在后台线程中执行的。 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 可确保 session 被锁定,这样 UI 状态中就不会出现任何冲突。它还确保 UI.getCurrent()VaadinSession.getCurrent() 返回正确的值。

关于java - 如何在 Mono.subscribe 中使用 UI.getCurrent().navigate ("route"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58266305/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com