Gwt 仅拍摄读取查询时[Auto bean Freeze]编辑(可变)代理的RequestFactory异常

Gwt 仅拍摄读取查询时[Auto bean Freeze]编辑(可变)代理的RequestFactory异常,gwt,requestfactory,Gwt,Requestfactory,让我把问题写在代码里: RPCRequest请求=ClientFactory.getRPCRequest(); VenueProxy地点=请求 .create(VenueProxy.class); 地点=请求。编辑(地点); 地点:setId(121)//麻烦制造者代码行。。。评论它会使事情顺利进行 地点:设置版本(0)//帮助程序行,否则获取的异常版本为空 request.readVenueById(121).fire(新接收器(){ 成功时公共无效(维努埃代理场馆){ .... .... }

让我把问题写在代码里:

RPCRequest请求=ClientFactory.getRPCRequest();
VenueProxy地点=请求
.create(VenueProxy.class);
地点=请求。编辑(地点);
地点:setId(121)//麻烦制造者代码行。。。评论它会使事情顺利进行
地点:设置版本(0)//帮助程序行,否则获取的异常版本为空
request.readVenueById(121).fire(新接收器(){
成功时公共无效(维努埃代理场馆){
....
....
}
}
现在,我在这里所做的只是触发一个读取查询请求。当我触发请求时,没有对新创建的可编辑代理场所的引用,但这将为我提供以下异常堆栈跟踪:

java.lang.IllegalStateException: The AutoBean has been frozen
at com.google.web.bindery.autobean.shared.impl.AbstractAutoBean.checkFrozen(AbstractAutoBean.java:195)
at com.google.web.bindery.autobean.shared.impl.AbstractAutoBean.setProperty(AbstractAutoBean.java:270)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:337)
at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:218)
at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561)
at com.google.gwt.dev.shell.ModuleSpace.invokeNativeVoid(ModuleSpace.java:289)
at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeVoid(JavaScriptHost.java:107)
at com.google.web.bindery.autobean.gwt.client.impl.ClientPropertyContext$Setter$.call$(ClientPropertyContext.java)
at com.google.web.bindery.autobean.gwt.client.impl.ClientPropertyContext.set(ClientPropertyContext.java:137)
at com.google.web.bindery.requestfactory.shared.impl.AbstractRequestContext$3.visitValueProperty(AbstractRequestContext.java:910)
at com.xxxxxxxxxx.shared.VenueProxyAutoBean_com_google_web_bindery_requestfactory_shared_impl_EntityProxyCategory_com_google_web_bindery_requestfactory_shared_impl_ValueProxyCategory_com_google_web_bindery_requestfactory_shared_impl_BaseProxyCategory.traverseProperties(EtmVenueMasterProxyAutoBean_com_google_web_bindery_requestfactory_shared_impl_EntityProxyCategory_com_google_web_bindery_requestfactory_shared_impl_ValueProxyCategory_com_google_web_bindery_requestfactory_shared_impl_BaseProxyCategory.java:356)
at com.google.web.bindery.autobean.shared.impl.AbstractAutoBean.traverse(AbstractAutoBean.java:166)
at com.google.web.bindery.autobean.shared.impl.AbstractAutoBean.accept(AbstractAutoBean.java:101)
at com.google.web.bindery.requestfactory.shared.impl.AbstractRequestContext.processReturnOperation(AbstractRequestContext.java:879)
at com.google.web.bindery.requestfactory.shared.impl.AbstractRequestContext.processReturnOperations(AbstractRequestContext.java:1215)
at com.google.web.bindery.requestfactory.shared.impl.AbstractRequestContext.access$7(AbstractRequestContext.java:1185)
at com.google.web.bindery.requestfactory.shared.impl.AbstractRequestContext$StandardPayloadDialect.processPayload(AbstractRequestContext.java:347)
at com.google.web.bindery.requestfactory.shared.impl.AbstractRequestContext$5.onTransportSuccess(AbstractRequestContext.java:1108)
at com.google.web.bindery.requestfactory.gwt.client.DefaultRequestTransport$1.onResponseReceived(DefaultRequestTransport.java:136)
at com.google.gwt.http.client.Request.fireOnResponseReceived(Request.java:287)
at com.google.gwt.http.client.RequestBuilder$1.onReadyStateChange(RequestBuilder.java:395)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:337)
at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:218)
at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561)
at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269)
at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
at com.google.gwt.core.client.impl.Impl.apply(Impl.java)
at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:213)
at sun.reflect.GeneratedMethodAccessor179.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:292)
at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:546)
at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363)
at java.lang.Thread.run(Thread.java:662)

我对
RequestFactory

的这种行为很好奇,您在创建后不调用edit。create用于创建新对象,我假设您在这里这样做

“编辑”用于编辑已经存在的对象…

您正在点击的对象(我不确定这是否是一个bug)


在服务器端,您将有两个具有相同ID的对象,即表示相同实体,RequestFactory无法很好地处理这两个对象(它可能会抛出到服务器上,而不是让客户端在解码响应时失败).

请求跟踪它处理的对象,这就是它如何在
edit()
fire()方法之间只发送更改的数据


在同一请求中已经有一个id相同的bean可以暂停问题。为什么不为该
readVenueById()
调用创建一个新的请求?

然而,在可编辑代理上调用
edit()
并没有问题,这是一个禁止操作。即使我没有在新创建的代理上调用edit(),它也会抛出相同的异常堆栈。