Проблемы с GWT-Pratform PlaceManager + Gin

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

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

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

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

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

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

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

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


person caarlos0    schedule 19.09.2011    source источник


Ответы (3)


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

person Mikael Couzic    schedule 20.09.2011
comment
Тогда вам не следует вызывать updateHistory(), попробуйте вместо этого использовать метод rejectPlace(). - person caarlos0; 20.09.2011
comment
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.java:208) на com.google.gwt .core.client.impl.SchedulerImpl$Task$.executeScheduled$(SchedulerImpl.java:50) на com.google.gwt.core.client.impl.SchedulerImpl.runScheduledTasks(SchedulerImpl.java:228) на com.google.gwt .core.client.impl.SchedulerImpl.flushPostEventPumpCommands(SchedulerImpl.java:388) на com.google.gwt.core.client.impl.SchedulerImpl$Flusher.execute(SchedulerImpl.java:78) на com.google.gwt.core .client.impl.SchedulerImpl.execute(SchedulerImpl.java:138) в sun.reflect.NativeMethodAccessorImpl.invoke0(собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke(неизвестный источник) в sun.reflect.DelegatingMethodAccessorImpl.invoke(неизвестный источник) ) на java.lang.reflect.Method.invoke (неизвестный источник) на com.google.gwt.dev.shell.MethodAdaptor.in voke(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.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java: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) в sun.reflect.GeneratedMethodAccessor29.invoke(неизвестный источник) в sun.reflect.Deleg atingMethodAccessorImpl.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.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 (неизвестный источник) - person Mikael Couzic; 20.09.2011

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

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

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

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

  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 ;
    ...

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

  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 ;
    ...
person user259    schedule 26.02.2012

DefaultModule заботится о Binding EventBus, TokenFormatter, RootPresenter, PlaceManager и GoogleAnalytics.

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

я пытаюсь заставить его перейти от #!home к #!adduser, но я думаю, что я сделал что-то не так, следуя примеру с вложенными докладчиками, это работает..

person Ümit    schedule 20.09.2011