Pregunta

Estoy tratando de obligar a fin de GWT con su capa de presentación, pero no parece estar haciendo nada.

Es un proyecto generado Spring Roo GWT y estoy tratando de utilizar el andamio dada la medida de lo posible. La vista es un simple botón (R.ui.xml) y el resto de la vista se define en 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;
    }

}

El presentador:

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());
    }

}

Y para mi módulo de GIN utilizo el ScaffoldModule generado en el paquete ... 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;
        }
    }
}

En la consola de modo de desarrollo GWT, el "configure ScaffoldModule" nunca aparece, sin embargo, el andamio generada parece vinculante bien como los acontecimientos van pasando a lo largo de componente a componente sin ningún problema, a menos que la unión es mágicamente sucediendo en otra parte y es decir código muerto.

Cuando pongo mi bind (RPresenter.Display.class) .para (R.class) en, no parece que hacer la unión. La única salida que me meto en la consola de GWT es "botón de clic" que se llama en la vista y luego nada más. Me falta claramente algo, alguna idea?

¿Fue útil?

Solución

La llamada a GWT.log () cualquier cosa que no es la salida de un AbstractGinModule - clases que se extienden AbstractGinModule (ScaffoldModule en su situación) son utilizados por la ginebra al compilar para decidir qué implementaciones concretas a utilizar para las interfaces inyectados. Del resto de su descripción (es decir, que los programas de la interfaz de usuario hasta en la aplicación) Parece que la inyección de dependencia está trabajando correctamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top