I have a problem with click handlers that are not called. I use the MVP design explained in the article "Large scale application development and MVP". I have a simple view which contains one button. I also have another view that is just a container for that button. It's just to simulate the problem. For each view I have a presenter. In the AppController I have two ways to create the application, "test" which uses the SimpleButtonPresenter, and "container" which uses the ContainerPresenter. In the first case the handler is called but in the second case it's not. The only difference between the two cases if that in the second case, the button is inside a container. Do you have an idea where the problem comes from?
AppController public class AppController implements Presenter, ValueChangeHandler<String> { private final HandlerManager eventBus; private HasWidgets container; public AppController(HandlerManager eventBus) { this.eventBus = eventBus; bind(); } private void bind() { History.addValueChangeHandler(this); } public void go(final HasWidgets container) { this.container = container; if ("".equals(History.getToken())) { History.newItem("main"); } else { History.fireCurrentHistoryState(); } } public void onValueChange(ValueChangeEvent<String> event) { String token = event.getValue(); if (token != null) { Presenter presenter = null; if (token.equals("main")) { } else if ("test".equals(token)) { presenter = new SimpleButtonPresenter(eventBus, new SimpleButtonView()); } else if ("container".equals(token)) { presenter = new ContainerPresenter(eventBus, new ContainerView()); } if (presenter != null) { presenter.go(container); } } } } The Views public class SimpleButtonView extends Composite implements SimpleButtonPresenter.Display { private final Button btnClick; public SimpleButtonView() { DecoratorPanel container = new DecoratorPanel(); btnClick = new Button("Click Me"); container.add(btnClick); this.initWidget(container); } @Override public Widget asWidget() { return this; } @Override public HasClickHandlers getButton() { return btnClick; } } public class ContainerView extends Composite implements ContainerPresenter.Display { public ContainerView() { DecoratorPanel container = new DecoratorPanel(); SimpleButtonView sbv = new SimpleButtonView(); container.add(sbv); this.initWidget(container); } @Override public Widget asWidget() { return this; } } The Presenters public class SimpleButtonPresenter implements Presenter { public interface Display { HasClickHandlers getButton(); Widget asWidget(); } private final HandlerManager eventBus; private final Display display; public SimpleButtonPresenter(HandlerManager eventBus, Display view) { this.eventBus = eventBus; this.display = view; } @Override public void go(HasWidgets container) { bind(); container.clear(); container.add(display.asWidget()); } public void bind() { display.getButton().addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { System.out.println("Click"); } }); } } public class ContainerPresenter implements Presenter { public interface Display { Widget asWidget(); } private final HandlerManager eventBus; private final Display display; private final SimpleButtonPresenter simpleButtonPresenter; public ContainerPresenter(HandlerManager eventBus, Display view) { this.eventBus = eventBus; this.display = view; simpleButtonPresenter = new SimpleButtonPresenter(eventBus, new SimpleButtonView()); } @Override public void go(HasWidgets container) { bind(); container.clear(); container.add(display.asWidget()); } public void bind() { simpleButtonPresenter.bind(); } } -- 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-tool...@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.