Gin & GWT: Слои для привязки с представлением с представлением

StackOverflow https://stackoverflow.com/questions/4676686

  •  10-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь связать представление GWT со слоем презентации, но, похоже, он ничего не делает.

Это проект, сгенерированный Spring Roo GWT, и я пытаюсь использовать эшафот, данный как можно дальше. Вид - это простая кнопка (r.ui.xml), а остальная часть представления определяется в 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;
    }

}

Докладчик:

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

}

А для моего модуля джина я использую сгенерированный каркасный пакет в пакете ... 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;
        }
    }
}

В консоли режима разработки GWT «конфигурация каркаса» никогда не отображается, однако сгенерированное каркас, кажется, все в порядке, так как события передаются из компонента к компоненту без зацепления, если не волшебное происходит в другом месте, и это мертв. код.

Когда я вставляю свою привязку (rpresenter.display.class). Единственный вывод, который я получаю в консоли GWT, - это «нажатая кнопка», которая вызывается в представлении, а затем ничего дальше. Я явно что -то упускаю, какие -нибудь идеи?

Это было полезно?

Решение

Призыв к gwt.log () ничего не выведет из классов AbstractginModule - расширяет AbstractginModule (каркасовая модуль в вашей ситуации) используется джинсом во время компиляции решить, какие конкретные реализации использовать для инъекционных интерфейсов. Из остальной части вашего описания (то есть, пользовательский интерфейс отображается в приложении), кажется, что ваша зависимость работает правильно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top