MVP GWT - проблема с введением EventBus - PullRequest
2 голосов
/ 03 июля 2011

Странная проблема, когда я внедряю EventBus, получаю исключение Проект GWT с использованием MVP

Вот пример кода.

Gin

public interface AppGinjector extends Ginjector
{
  EventBus getEventBus();
  PlaceManager getPlaceManager();
}

Вот точка входа

public class MvpEntryPoint implements EntryPoint
{
AppGinjector ginjector = GWT.create(AppGinjector.class);

public void onModuleLoad()
{

  EventBus eventBus = ginjector.geEventBus();
  HelloWorldPanel display = new HelloWorldPanel();
  HelloWorldPresenter presenter = new HelloWorldPresenter( display, eventBus );

  presenter.bind();

  RootPanel.get().add( presenter.getDisplay().asWidget() );

  PlaceManager placeManager =  ginjector.getPlaceManager();
  placeManager.fireCurrentPlace();

}

я использую джин 1.0, gwt-Presenter

У кого-нибудь есть идеи?

Спасибо

Edit:

Исключение составляет

ERROR: Deferred binding result type 'net.customware.gwt.presenter.client.EventBus' should not be abstract. 
ERROR: Unable to load module entry point class com.gmgsys.mvpEntryPoint.client.MvpEntryPoint (see associated exception for details). java.lang.RuntimeException: Deferred binding failed for 'net.customware.gwt.presenter.client.EventBus' (did you forget to inherit a required module?)
...........................

также gwt.xml

  <!-- Specify the app entry point class.                   -->
    <entry-point class='com.gmgsys.mvpEntryPoint.client.MvpEntryPoint'/>
    <inherits name='net.customware.gwt.presenter.Presenter' />
    <inherits name="com.google.gwt.inject.Inject" />

1 Ответ

4 голосов
/ 03 июля 2011

Я думаю, что вам не хватает класса AbstractPresenterModule, который гарантирует, что EventBus привязан к SimpleEventBus:

bind(EventBus.class).to(SimpleEventBus.class).in(Singleton.class);

Это должно быть что-то вроде этого:

public class MyClientModule extends AbstractPresenterModule {
  protected void configure() {
     bind(EventBus.class).to(SimpleEventBus.class).in(Singleton.class);
     // more bindings here
  }
}

И вы должны аннотировать свой Ginjector

@GinModules({ MyClientModule .class })
public interface AppGinjector extends Ginjector
{
  EventBus getEventBus();
  PlaceManager getPlaceManager();
}
...