Question

Je suis en train de lier une vue GWT avec sa couche de présentation, mais il ne semble pas faire quoi que ce soit.

Il est un projet généré GWT Roo printemps et je suis en train d'utiliser l'échafaud donné dans la mesure du possible. La vue est un simple bouton (R.ui.xml) et le reste de la vue est défini dans R.java:

public class R extends Composite implements RPresenter.Display {

    interface MyUiBinder extends UiBinder<Widget, R> {}
    private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);

    @UiField Button myButton;

    private ClickHandler buttonClickHandler = null;

    public R(){
        initWidget(uiBinder.createAndBindUi(this));
    }

    @UiHandler("myButton")
    void onButtonClick(ClickEvent event){
        GWT.log('Button clicked');
        if (buttonClickHandler != null){    
            GWT.log("buttonClickHandler event triggered");
            buttonClickHandler.onClick(event);
        }
    }

    @Override
    public void setButtonClickHandler(ClickHandler buttonClickHandler) {

        GWT.log("setButtonClickHandler");
        this.buttonClickHandler = buttonClickHandler;
    }

}

Le présentateur:

public class RPresenter {

    public interface Display extends IsWidget {
        void setButtonClickHandler(ClickHandler buttonClickHandler);
    }

    private final Display display;
    private final EventBus eventBus;

    @Inject
    public RPresenter(EventBus eventBus, Display display){
        this.display = display;
        this.eventBus = eventBus;
        bind();
    }

    private void bind(){
        display.setButtonClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                GWT.log("onClick event triggered");
            }
        });
    }

    public void go(HasWidgets container){
        container.add(display.asWidget());
    }

}

Et pour mon module GIN J'utilise le ScaffoldModule généré dans le paquet ... client.scaffold.ioc:

public class ScaffoldModule extends AbstractGinModule {

    @Override
    protected void configure() {

        GWT.log("ScaffoldModule configure");

        bind(EventBus.class).to(SimpleEventBus.class).in(Singleton.class);
        bind(ApplicationRequestFactory.class).toProvider(RequestFactoryProvider.class).in(Singleton.class);
        bind(PlaceController.class).toProvider(PlaceControllerProvider.class).in(Singleton.class);

        //bind(RPresenter.Display.class).to(R.class).in(Singleton.class);
        bind(RPresenter.Display.class).to(R.class);
    }

    static class PlaceControllerProvider implements Provider<PlaceController> {

        private final EventBus eventBus;

        @Inject
        public PlaceControllerProvider(EventBus eventBus) {
            this.eventBus = eventBus;
        }

        public PlaceController get() {
            return new PlaceController(eventBus);
        }
    }

    static class RequestFactoryProvider implements Provider<ApplicationRequestFactory> {

        private final EventBus eventBus;

        @Inject
        public RequestFactoryProvider(EventBus eventBus) {
            this.eventBus = eventBus;
        }

        public ApplicationRequestFactory get() {
            ApplicationRequestFactory requestFactory = GWT.create(ApplicationRequestFactory.class);
            requestFactory.initialize(eventBus);
            return requestFactory;
        }
    }
}

Dans la console de mode de développement GWT, le « configure ScaffoldModule » jamais affiche, mais l'échafaudage généré semble se lier très bien que les événements se passent le long d'un composant à sans accroc, à moins que la liaison se passe comme par magie ailleurs et qui est le code mort.

Quand je mets mon bind (RPresenter.Display.class) .pour (R.class) dans, il ne semble pas faire la liaison. La seule sortie que je reçois dans la console GWT est « bouton cliqué » qui est appelé dans la vue et rien d'autre. Je manque clairement quelque chose, des idées?

Était-ce utile?

La solution

L'appel à GWT.log () ne sera émis quoi que ce soit à partir d'un AbstractGinModule - classes qui étendent AbstractGinModule (ScaffoldModule dans votre situation) sont utilisés par le gin

scroll top