java - CDI 事件未触发

标签 java gwt errai

我有一个 Errai 应用程序,CDI 事件未触发:

@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");
    }

}

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

最佳答案

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

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

因此存在不匹配,即使您的事件看起来像是为 Person 事件触发的,但它实际上是为 JavaScriptObject 的观察者分派(dispatch)的。

关于java - CDI 事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43526947/

相关文章:

gwt - 如何使用Errai将GWT与JAX-RS/RESTEasy服务器集成?

JavaFX 无法加载 FXML,找不到资源

java - 使用 drawimage 和 repaint 时如何替换旧图像

gwt - 实时驱动文档中提到的 GwtDocumentBridge 是什么?

java - Errai 对 GAE 平台的支持

java - Errai JAX-RS - 未找到用于 POST 的资源方法,返回带有 Allow header 的 405

java - 有没有一种方法可以在不使用包资源管理器/项目/导航器的情况下比较两个打开的文件?

java - 这是 dtos 中构建器模式的正确用法吗?

java - GWT Editors 框架 - ListEditor、删除项目、违反 MVP

gwt - GWT 2.4 中的拖放