2

我将 GWT 2.4 与 RequestFactory 一起使用,但对我来说并非一切都清楚。

这篇文章中,作者写了当我们将实体代理与一个实例RequestContext一起使用并希望edit()将此实体代理与其他实例重用()时的情况RequestContext

它不能被编辑,因为它已经分配了一个 requestContext。如果要更改它,您必须再次从服务器检索此实体的实例

但是当我执行这段代码时,我没有遇到任何异常:

RequestContext newRequest1 = factory.myRequest();
newRequest1.edit(proxy);
RequestContext newRequest2 = factory.myRequest();
newRequest2.edit(proxy);

当我运行这个版本时,出现了 autor 描述的问题(异常):

RequestContext newRequest1 = factory.myRequest();
MyProxy edited = newRequest1.edit(proxy);
RequestContext newRequest2 = factory.myRequest();
newRequest2.edit(edited);

因此,似乎只有返回的可编辑副本edit()与 RequestContext 实例直接相关。

在这种情况下,在我的编辑视图中保留一个(不可编辑/冻结)代理实例并且每次用户单击“编辑”按钮时,我edit()使用新的新 RequestContext 的方法是否有问题?或者我也应该每次都获得新的代理实例?

获取新的代理实例对我来说似乎有点尴尬,但我想重用一个代理实例可能会导致一些与向服务器发送更改增量相关的问题?

所以换个说法:用多个 ? 重用单个代理实例是一个好习惯RequestContexts

4

1 回答 1

1

编辑同一个代理两次(或更多)没有问题,只要一次只有一个可编辑的实例(你的第一个代码片段应该抛出;如果不是那么它是一个错误;如果你不保留它可能会工作RequestContext和编辑的代理上的引用)。

请注意,RequestFactory 仅将修改后的属性发送到服务器,但它通过与传递给的不可编辑实例进行比较来实现edit();所以你应该尽量使用最新的实例来保持你的服务器端/持久数据尽可能接近你的客户端数据(看起来很明显,但在实践中可能会导致一些意外:如果你看到foo on客户端但在服务器上有bar,您将在服务器端保留bar,直到您将客户端上的属性修改为foo以外的其他内容)

于 2012-04-29T17:37:10.890 回答