首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何撤消RequestFactory更新

如何撤消RequestFactory更新
EN

Stack Overflow用户
提问于 2012-01-20 22:41:59
回答 3查看 426关注 0票数 9

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

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

我应该如何对使用RequestFactory进行的更新执行撤消?

EN

回答 3

Stack Overflow用户

发布于 2012-08-09 21:20:16

您应该考虑修改服务器端数据结构和表。在那里合并一个时态或双时态模型。不要试图在内存中保留实体的“旧”状态,或者拦截它们。使用时间字段保持实体的先前状态不变。撤消意味着通过时间戳定位以前的版本,并使其成为最新版本。您也可以同时跨多个实体类型执行此操作。

  • 01:00披萨A saved
  • 01:01披萨A成分更改
  • 01:02披萨A成分更改
  • 01:03 undo to 01:01

如果你愿意,你可以定期清理你的数据库并清理旧版本。时态写入的“仅附加”风格也可以产生性能优势。

票数 1
EN

Stack Overflow用户

发布于 2012-02-02 13:57:45

在您触发请求之前,请求工厂不会更新服务器实体。因此,您可以简单地避免调用fire(),以防止对服务器进行修改。希望这就是你的意思。你能发布代码来演示你更新实体的方式,以及你想要在哪里执行撤销吗?

票数 0
EN

Stack Overflow用户

发布于 2012-02-03 12:40:18

我不知道你是否愿意这么做。为此,假设你想撤销一个类的更改,比如Contact,添加一个相同类型的字段,类似于以前的状态(如果你不想让它影响你的持久化,就让它成为瞬态的),让这个类看起来像这样:

代码语言:javascript
复制
class Contact {

    Integer id;
    Integer version;

    String name;
    String phoneNumber;

    //Transient
    Contact previousState;

}

现在,在persist调用中,将当前数据备份到previousState中,然后持久化当前Contact实体。在undo调用中,将数据从previousState复制到"this“。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8943082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档