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.

Reply via email to