I can't see how it's happening in your case (either there's more relevant code or it's very early in the morning!) but I've previously come across a similar problem. The SimpleEventBus, on which HandlerManager is based, uses deferred methods to only apply changes to the handler lists after the current round of events have fired [1]. i.e. if you are currently in a handler, add a handler and then immediately fire that event, your handler won't be called (ever).
[1] http://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/web/bindery/event/shared/SimpleEventBus.java#156 Chris On Tue, Feb 14, 2012 at 9:57 AM, claus.jespep...@googlemail.com <claus.jespep...@googlemail.com> wrote: > I am new at GWT, but I have working on the MVP tutorial and have > encountered some problems: > > from my EntryPoint class: > > public void onModuleLoad() { > > HandlerManager eventBus = new HandlerManager(null); > AppController appController = new AppController(eventBus); > appController.go(RootLayoutPanel.get()); > } > > in the AppController: > public AppController(HandlerManager eventBus){ > this.eventBus = eventBus; > bind(); > } > > private void bind() { > eventBus.addHandler(LogOutEvent.TYPE, new LogOutEventHandler() > { > @Override > public void onLogOut(LogOutEvent event) { > Window.alert("yes!"); //does not work :-( > } > }); > eventBus.addHandler(LoginEvent.TYPE, new LoginEventHandler() { > @Override > public void onLogin(LoginEvent event) { > handleLogin(event.getUser()); // does work ?! > } > }); > } > > @Override > public void go(final HasWidgets container) { > this.container = container; > LoginView loginView = new LoginView(); > presenter = new LoginPresenter(eventBus, rpcLoginService, > loginView); > loginView.setPresenter(presenter); > presenter.go(container); > } > > private void handleLogin(User user) { > LogoutView logoutView = new LogoutView(); > presenter = new LogoutPresenter(eventBus, rpcLogoutService, > logoutView, user); > logoutView.setPresenter(presenter); > presenter.go(container); > } > > private void handleLogout(){ > Window.alert("hej"); > LoginView loginView = new LoginView(); > presenter = new LoginPresenter(eventBus, rpcLoginService, > loginView); > loginView.setPresenter(presenter); > presenter.go(container); > } > > Please note above that the login handler is registered and works > flawlessly! > Also note that I've got two presenters: LoginPresenter, > LogOutPresenter. And they are > basically the same; they get informed by a view that a button has been > clicked and do a > RPC (which works). > > in LogOutPresenter: > public void onLogOutButtonClicked(){ > rpcService.logoutNow(user, new AsyncCallback<Void>() { > @Override > public void onSuccess(Void result) { > LogOutEvent logout = new LogOutEvent(); > eventBus.fireEvent(logout); //does not do > anything! > > Window.alert("" + > eventBus.isEventHandled(LogOutEvent.TYPE)); // > this yields true?! > } > @Override > public void onFailure(Throwable caught) { > if(caught instanceof UserLoginException) > Window.alert("exception occured"); > } > }); > } > > If I debug in the onSuccess method above and step into > eventBus.fireEvent(logout), I get > to a place where I see the handler list is empty! even though the > event is registered! > > Any Ideas? > > -- > You received this message because you are subscribed to the Google Groups > "Google Web Toolkit" group. > To post to this group, send email to google-web-toolkit@googlegroups.com. > To unsubscribe from this group, send email to > google-web-toolkit+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/google-web-toolkit?hl=en. > -- You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to google-web-toolkit@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.