我尝试使用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);
场所经理必须是单身人士...但是,它根本不起作用。
有人有这个问题吗?
答案 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。