【发布时间】:2017-04-20 18:14:40
【问题描述】:
我有一个没有触发 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");
}
}
我认为这段代码非常简单,我想知道为什么它没有触发。
【问题讨论】:
-
showing方法真的被调用了吗?您是否从不同的 (@Singleton) 实例观察事件? -
顺便说一句,我指的这个 Person 对象是
@JsType(isNative = true, namespace = JsPackage.GLOBAL, name = "Object") -
可能
@JsType干扰了事件机制,您是否尝试将Person类包装在一个普通的java 类中? -
@k5_ 不是真的,因为我们的模型是基于 JsInterop 的
-
观察者方法必须在另一个bean中,而不是在触发事件的同一个bean中。