Проблемы с GWT-Pratform PlaceManager + Gin - PullRequest
1 голос
/ 20 сентября 2011

Я пытаюсь что-то сделать с GWT-Platform, но, следуя примерам на этой странице: http://code.google.com/p/gwt-platform/wiki/GettingStarted?tm=6 simple не работает.

Я получил следующую ошибку:

java.lang.AssertionError: Внутренняя ошибка, запрос PlaceRequest, переданный в updateHistory, не соответствует хвосту иерархии мест.в com.gwtplatform.mvp.client.proxy.PlaceManagerImpl.updateHistory (PlaceManagerImpl.java:489) в com.gwtplatform.mvp.client.proxy.ProxyPlaceAbstract $ 3 $ 1.execute (ProxyPlaceAbstract.jt.gw.g8).core.client.impl.SchedulerImpl $ Task $ .executeScheduled $ (SchedulerImpl.java:50) на com.google.gwt.core.client.impl.SchedulerImpl.runScheduledTasks (SchedulerImpl.java:228) на com.google.gw.core.client.impl.SchedulerImpl.flushPostEventPumpCommands (SchedulerImpl.java:388) в com.google.gwt.core.client.impl.SchedulerImpl $ Flusher.execute (SchedulerImpl.java:78) в com.gore.gw..client.impl.SchedulerImpl.execute (SchedulerImpl.java:138) в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (неизвестный источник) в исходном исходном исходном коде) на java.lang.reflect.Method.invoke (неизвестный источник) на com.google.gwt.dev.shell.MethodAdaptor.invoke (MethodAdaptor.java:103) на com.google.gwt.dev.shell.MethodDispatch.invoke (MethodDispatch.java:71) по адресу com.google.gwt.dev.shell.OophmSessionHandler.invoke (OophmSessionHandler.java:172) по адресу com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingverJnelS:337) на com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript (BrowserChannelServer.java:218) на com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke (ModuleSpaceOOPHM.java:136) на com.google.gwt..dev.shell.ModuleSpace.invokeNative (ModuleSpace.java:561) в com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject (ModuleSpace.java:269) в com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91) на com.google.gwt.core.client.impl.Impl.apply (Impl.java) на com.google.gwt.core.client.impl.Impl.entry0 (Impl.java:213.MethodAdaptor.invoke (MethodAdaptor.java:103) на com.google.gwt.dev.shell.MethodDispatch.invoke (MethodDispatch.java:71) на com.google.gwt.dev.shell.OophmSessionHandler.invoke (OophmSessionHandler.java:172) на com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages (BrowserChannelServer.java:292) на com.google.gwt.dev.shell.BrowserChannelServer.processConnection (BrowserChannelServer.java:546) на com.google.gwt..dev.shell.BrowserChannelServer.run (BrowserChannelServer.java:363) в java.lang.Thread.run (неизвестный источник)

, когда я пытаюсь сделать PlaceRequest.

Я предполагаю, что это происходит потому, что PlaceManager внедрен, и, в некотором роде, он не такой одиночный, но, следуя вики (http://code.google.com/p/gwt-platform/wiki/GettingStarted?tm=6#Binding_everything_together):

Установка DefaultModule, избавляет вас от необходимости выполнять все следующие привязки: bind (EventBus.class) .to (SimpleEventBus.class) .в (Singleton.class);связывания (TokenFormatter.class) .to (ParameterTokenFormatter.class) .в (Singleton.class);связывания (RootPresenter.class) .asEagerSingleton ();связывания (PlaceManager.class) .to (MyPlaceManager.class) .в (Singleton.class);bind (GoogleAnalytics.class) .to (GoogleAnalyticsImpl.class) .in (Singleton.class);

менеджер мест уже должен быть одноэлементным ... но он просто не работает.

У кого-то есть эта проблема?

Ответы [ 3 ]

3 голосов
/ 26 февраля 2012

Только что столкнувшись с этой проблемой с gwtp 0.6, я нашел решение для своей проблемы.

Проблема оказалась в том, что я связал свою реализацию PlaceManager в классе ClientModule:

  protected void configure() {
    // Singletons
    install(new DefaultModule(ClientPlaceManager.class));
    ...

и затем автоматически привязывать мою ту же реализацию в конструкторе презентатора

  private ClientPlaceManager placeManager ; //wrong - should be the interface

  @Inject
  public FrameworkLayoutPresenter(final EventBus eventBus, final MyView view, final MyProxy proxy, 
      final ClientPlaceManager placeManager) //wrong - should be the interface
  {
    super(eventBus, view, proxy);
    this.placeManager = placeManager ;
    ...

Но я должен был связать интерфейс PlaceManager

  private PlaceManager placeManager ; 

  @Inject
  public FrameworkLayoutPresenter(final EventBus eventBus, final MyView view, final MyProxy proxy, 
      final PlaceManager placeManager) 
  {
    super(eventBus, view, proxy);
    this.placeManager = placeManager ;
    ...
1 голос
/ 20 сентября 2011

Если вы используете GTWP 0.6, вы можете использовать DefaultModule следующим образом:

public class ClientModule extends AbstractPresenterModule {
    @Override
    protected void configure() {
         install(new DefaultModule(MyPlaceManager.class));
}

DefaultModule заботится о привязке EventBus, TokenFormatter, RootPresenter, PlaceManager и GoogleAnalytics.

1 голос
/ 20 сентября 2011

Каждый раз, когда я получаю это исключение, это потому, что PlaceRequest, который я передаю updateHistory, не имеет такой же NameToken, как текущее место, что недопустимо.
Что вы пытаетесь сделать именно?

...