通过GWT RPC更新对象很容易撤消。我们需要在内存中克隆先前的实体状态,并在撤消时应用它。
但是当我们使用RequestFactory时,没有具体的更新操作。 RequestFactory将实体修改发送到服务器并更新存储库实体本身。我们无法拦截更新过程。
如何对使用RequestFactory进行更新实现撤消?
答案 0 :(得分:1)
您应该考虑修改服务器端数据结构和表。在那里纳入时间或双时间模型。不要试图抓住#34; old"内存中的实体状态,或拦截它们。使用时间字段保持实体的先前状态不变。撤消意味着按时间戳定位先前版本,并使其成为当前版本。您也可以同时在多个实体类型中执行此操作。
如果您愿意,可以定期扫描数据库并清理旧版本。 "仅附加"时态写入的风格也可以产生性能上的好处。
答案 1 :(得分:0)
在您触发请求之前,请求工厂不会更新服务器实体。因此,您可以简单地避免调用fire(),以防止在服务器上进行修改。希望这就是你的意思。您是否可以发布代码来说明更新实体的方式,以及要执行撤消的位置?
答案 2 :(得分:0)
我不知道你是否愿意这样做。为此,假设您要撤消类的更改,比如说Contact,添加一个相同类型的字段,类似于以前的状态(如果您不希望它破坏您的持久性,只需将其设置为瞬态),以便class看起来像这样:
class Contact {
Integer id;
Integer version;
String name;
String phoneNumber;
//Transient
Contact previousState;
}
现在在您的持久调用中,将当前数据备份到previousState,然后保留当前的Contact实体。在撤消调用中,将数据从previousState复制到“this”。
撤消在服务器上没有任何意义,必须在客户端上管理这些事情。我没有遇到服务器上需要撤消功能的任何情况。因此,请引用您希望实现此目标的场景和代码。