GWT-Pratform PlaceManager + Gin的问题

时间:2011-09-19 21:43:02

标签: java gwt gwt-platform

我尝试使用GWT-Platform做一些事情,但是,按照本页中的示例:http://code.google.com/p/gwt-platform/wiki/GettingStarted?tm=6 simple不起作用。

我收到以下错误:

  

java.lang.AssertionError:内部错误,传递给updateHistory的PlaceRequest与场所层次结构的尾部不匹配。       在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)       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)       at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)       at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)       at java.lang.reflect.Method.invoke(Unknown Source)       在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.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)       at sun.reflect.GeneratedMethodAccessor29.invoke(Unknown Source)       at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)       at java.lang.reflect.Method.invoke(Unknown Source)       在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(未知来源)

当我尝试制作PlaceRequest时。

我想这是因为PlaceManager被注入了,而且,不管怎样,它不是单身,而是在wiki之后(http://code.google.com/p/gwt-platform/wiki/GettingStarted?tm = 6#Binding_everything_together):

  

安装DefaultModule使您不必执行以下所有绑定:    绑定(EventBus.class)。为了(SimpleEventBus.class)。在(Singleton.class);       绑定(TokenFormatter.class)。为了(ParameterTokenFormatter.class)。在(Singleton.class);       绑定(RootPresenter.class).asEagerSingleton();       绑定(PlaceManager.class)。为了(MyPlaceManager.class)。在(Singleton.class);       绑定(GoogleAnalytics.class)。为了(GoogleAnalyticsImpl.class)。在(Singleton.class);

场所经理必须是单身人士...但是,它根本不起作用。

有人有这个问题吗?

3 个答案:

答案 0 :(得分:3)

刚刚遇到gwtp 0.6这个问题,我找到了解决问题的方法。

问题结果是我将PlaceManager的实现绑定在ClientModule类中:

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

然后在presenter构造函数

中自动绑定我的相同实现
  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 :(得分:1)

每次我收到此异常时,都是因为传递给updateHistory的PlaceRequest与当前位置没有相同的NameToken,这是不合法的。
你准备做什么?

答案 2 :(得分:1)

如果您使用的是GTWP 0.6,您可以这样使用DefaultModule:

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

DefaultModule负责绑定EventBus,TokenFormatter,RootPresenter,PlaceManager和GoogleAnalytics。