【问题标题】:REST-triggered CDI event fail to update Vaadin UIREST 触发的 CDI 事件无法更新 Vaadin UI
【发布时间】:2014-10-01 10:05:13
【问题描述】:

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

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

当服务被调用时,事件被触发,下面是产生的错误:

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

调试器在手,我已经检查了 CDI 是否正确启动。东西被注入,@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 的帮助都非常棒!

【问题讨论】:

    标签: java jakarta-ee vaadin cdi wildfly-8


    【解决方案1】:

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

    广播器模式在您使其支持 CDI 后就可以正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 2015-01-09
      • 1970-01-01
      • 2016-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多