使用GWT并请求出厂时,我遇到以下问题。
我正在研究一个由不同实体组成的对象树,例如A引用B和C,C引用D。
我有一个loadAs方法,它使用with annotations(with("B", "C", "C.D")
)返回整个对象图。到目前为止,一切看起来都很棒,我在客户端上加载了以下结构。
A1
-> B1
-> C1
-> D1
现在,我在客户端的请求上下文中创建以下内容。
A* (created on the client using context.create() )
-> B1 (same B1 that was already loaded)
-> C* (created on the client using context.create())
-> D1 (same D1 that was already loaded)
我的持久化方法如下所示:Request<List<A>> persistAs(List<A>)
我使用与loadAs(with("B", "C", "C.D")
)完全相同的带参数来激活它,但我的响应仍然如下:
A* (now contains an id that was created on the server)
-> B1 (same as the previously loaded)
-> C* (now contains an id that was created on the server)
-> null
因此,客户端上已存在的D1不是响应对象树的一部分。但是,D1将发送到服务器,并在persistAs方法中作为请求对象树的一部分提供。此外,persistAs确保返回完整的对象树(包含D1)。
我不知道为什么会这样。我也不知道在哪里调试。我没有任何例外。
我在调试时注意到的其他信息或调查结果,并试图解决此问题:
出于测试目的,我修改了persistAs方法的服务器实现,以便在As持久化之后内部调用loadAs。但那时客户什么都没收到?!?有关说明,请参阅以下代码示例:
List<A> persistAs(List<A> As) {
//Persist the As
// Make sure the object graph of the As is loaded
// return As;
// Debug only - return As using loadAs -> the client receives nothing at all
return loadAs(As);
}
答案 0 :(得分:0)
我想(我担心)这可能是http://code.google.com/p/google-web-toolkit/issues/detail?id=7189
的奇怪后果在edit()
fire()
RequestContext
之前,尝试{{1}}您的D1代理(以及B1也是如此)。