Gin & GWT: Слои для привязки с представлением с представлением
Вопрос
Я пытаюсь связать представление 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 (каркасовая модуль в вашей ситуации) используется джинсом во время компиляции решить, какие конкретные реализации использовать для инъекционных интерфейсов. Из остальной части вашего описания (то есть, пользовательский интерфейс отображается в приложении), кажется, что ваша зависимость работает правильно.