I have an Errai app which CDI events are not firing:
@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");
}
}
I think this code is pretty straightforward and I wonder why it is not firing.
Your event is not being received because it is a native JS type. The issue is that Errai's
Eventimplementation dispatches based on aClassobject for that event type. This works for normal classes and even non-native JS types. But native JS types don't actually have classes at runtime; the compiler replaces any references withJavaScriptObject.class.On the observer side, Errai generates code that registers observer methods based on the class name that it figures out at compile time.
Thus there is a mismatch, where even though it looks like your event is firing for
Personevents, it is really being dispatched for observers ofJavaScriptObject.