如何撤消RequestFactory更新

时间:2012-01-20 14:41:59

标签: gwt undo requestfactory

通过GWT RPC更新对象很容易撤消。我们需要在内存中克隆先前的实体状态,并在撤消时应用它。

但是当我们使用RequestFactory时,没有具体的更新操作。 RequestFactory将实体修改发送到服务器并更新存储库实体本身。我们无法拦截更新过程。

如何对使用RequestFactory进行更新实现撤消?

3 个答案:

答案 0 :(得分:1)

您应该考虑修改服务器端数据结构和表。在那里纳入时间或双时间模型。不要试图抓住#34; old"内存中的实体状态,或拦截它们。使用时间字段保持实体的先前状态不变。撤消意味着按时间戳定位先前版本,并使其成为当前版本。您也可以同时在多个实体类型中执行此操作。

  • 01:00披萨A已保存
  • 01:01披萨A成分改变了
  • 01:02披萨A成分改变了
  • 01:03撤消到01:01

如果您愿意,可以定期扫描数据库并清理旧版本。 "仅附加"时态写入的风格也可以产生性能上的好处。

答案 1 :(得分:0)

在您触发请求之前,请求工厂不会更新服务器实体。因此,您可以简单地避免调用fire(),以防止在服务器上进行修改。希望这就是你的意思。您是否可以发布代码来说明更新实体的方式,以及要执行撤消的位置?

答案 2 :(得分:0)

我不知道你是否愿意这样做。为此,假设您要撤消类的更改,比如说Contact,添加一个相同类型的字段,类似于以前的状态(如果您不希望它破坏您的持久性,只需将其设置为瞬态),以便class看起来像这样:

class Contact {

    Integer id;
    Integer version;

    String name;
    String phoneNumber;

    //Transient
    Contact previousState;

}

现在在您的持久调用中,将当前数据备份到previousState,然后保留当前的Contact实体。在撤消调用中,将数据从previousState复制到“this”。

撤消在服务器上没有任何意义,必须在客户端上管理这些事情。我没有遇到服务器上需要撤消功能的任何情况。因此,请引用您希望实现此目标的场景和代码。