【问题标题】:Problems with GWT-Pratform PlaceManager + GinGWT-Pratform PlaceManager + Gin 的问题
【发布时间】:2011-09-19 21:43:02
【问题描述】:

我正在尝试使用 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) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.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.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.DelegatingMethodAccessorImpl.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(Unknown Source)

当我尝试发出 PlaceRequest。

我猜它的发生是因为 PlaceManager 被注入了,而且在某种程度上,它不像单例那样,而是遵循 wiki (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); 绑定(RootPresenter.class).asEagerSingleton(); 绑定(PlaceManager.class).to(MyPlaceManager.class).in(Singleton.class); bind(GoogleAnalytics.class).to(GoogleAnalyticsImpl.class).in(Singleton.class);

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

有人有这个问题吗?

【问题讨论】:

    标签: java gwt gwt-platform


    【解决方案1】:

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

    问题原来是我在 ClientModule 类中绑定了 PlaceManager 的实现:

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

    【讨论】:

      【解决方案2】:

      每次我得到这个异常,都是因为我传递给updateHistory的PlaceRequest没有与当前地点相同的NameToken,这是不合法的。
      你到底想做什么?

      【讨论】:

      • 我正试图让它从 #!home 变为 #!adduser,但是,我认为我做错了什么,按照嵌套演示者的示例它可以工作..
      • 那么你不应该调用updateHistory(),而是尝试使用revealPlace()。
      【解决方案3】:

      如果您使用的是 GTWP 0.6,您可以通过这种方式使用 DefaultModule:

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

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

      【讨论】:

        猜你喜欢
        • 2012-03-05
        • 1970-01-01
        • 1970-01-01
        • 2011-09-07
        • 1970-01-01
        • 2012-04-21
        • 2011-11-29
        • 2012-03-13
        • 2012-03-16
        相关资源
        最近更新 更多