CDI 事件未触发

CDI events not firing

我有一个没有触发 CDI 事件的 Errai 应用程序:

@Dependent
@Templated
@Page(path = "person")
public class PersonPage extends Composite {

    @Inject
    @Loaded
    Event<Person> loadedEvent;

    @PageShowing
    public void showing() {
        Browser.getWindow().getConsole().log("Firing event..."); // works fine
        loadedEvent.fire(new Person());
    }

    public void loaded(@Observes @Loaded Person person) {
        Window.alert("Fired");
    }

}

我认为这段代码非常简单,我想知道为什么它没有触发。

没有收到您的事件,因为它是原生 JS 类型。问题是 Errai 的 Event 实现基于该事件类型的 Class 对象进行调度。这适用于普通 classes 甚至非原生 JS 类型。但是原生 JS 类型在运行时实际上并没有 classes;编译器将所有引用替换为 JavaScriptObject.class.

在观察者方面,Errai 生成代码,根据编译时计算出的class名称注册观察者方法

因此存在不匹配,即使看起来您的事件正在为 Person 事件触发,但它实际上是为 JavaScriptObject.

的观察者分派的