gpt4 book ai didi

java - REST 触发的 CDI 事件无法更新 Vaadin UI

转载 作者:行者123 更新时间:2023-12-01 12:40:04 26 4
gpt4 key购买 nike

在我的应用程序中,一个 Restful Web 服务可以触发 CDI 事件(经过测试和工作,事件在预期时触发,一个简单的观察者方法将按计划记录事件)。

但是,在大多数情况下,我需要这些事件来更新管理控制台(使用 Vaadin-CDI 的 Vaadin 7.3 应用程序)的 UI。

调用服务时,会触发该事件,以下是产生的错误:

Caused by: java.lang.IllegalStateException: CDI listener identified, but there is no active UI available.

调试器在手,我已经检查了 CDI 是否正确启动。东西被注入(inject),@Observes方法被正确调用等等......

这是 Vaadin UI 的代码:

@CDIUI
public class Console extends UI {

@Inject
private PersonDao dao; // Properly injected

private Layout layout;

private void addClickedLabel() {
Label label = new Label("Clicked !!");
layout.addComponent(label);
}

@Override
protected void init(final VaadinRequest vaadinRequest) {
layout = new FormLayout();
Button b = new Button("Click me !!");
layout.addComponent(b);
b.addClickListener(clickEvent -> { addClickedLabel(); });
this.setContent(layout);
}

// Method called, but exception raised before !st line is executed.
private void receiveConnectionEvent(@Observes final ConnectionEvent event) {
UI.getCurrent().access(() -> {
String desc = String desc = String.format("Event: %s from %s.", event.getType(), event.getSource());
Label label = new Label(desc);
layout.addComponent(label);
});
}
}

我已经完成了 RTFM 的工作,并在 google 上尝试了运气,任何有关如何从 CDI 事件正确更新 UI 的帮助都非常棒!

最佳答案

其实手册里已经有解决办法了... https://vaadin.com/book/-/page/advanced.push.html

一旦您使其支持 CDI,广播模式就可以正常工作。

关于java - REST 触发的 CDI 事件无法更新 Vaadin UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25194805/

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