Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gwt 如何撤消RequestFactory更新_Gwt_Undo_Requestfactory - Fatal编程技术网

Gwt 如何撤消RequestFactory更新

Gwt 如何撤消RequestFactory更新,gwt,undo,requestfactory,Gwt,Undo,Requestfactory,通过GWT RPC更新对象很容易撤消。我们需要克隆内存中以前的实体状态,并在撤消时应用它 但是当我们使用RequestFactory时,没有具体的更新操作。RequestFactory将实体修改发送到服务器并更新存储库实体本身。我们无法拦截更新进程 如何实现对使用RequestFactory进行的更新的撤消?在您发出请求之前,RequestFactory不会更新服务器实体。因此,您可以简单地避免调用fire(),以防止在服务器上进行修改。希望这就是你的意思。您能否发布代码,说明您更新实体的方式以

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

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


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

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

我不知道您是否愿意这样做。为此,假设您要撤消类的更改,例如Contact,添加一个相同类型的字段,类似于前一个状态(如果您不想让它破坏持久性,请将其设置为瞬态),这样该类看起来如下所示:

class联系人{
整数id;
整数版本;
字符串名;
字符串电话号码;
//短暂的
联系先前状态;
}
现在在persist调用中,将当前数据备份到previousState,然后持久化当前联系人实体。在撤销调用中,将数据从先前状态复制到“this”


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

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

  • 01:00披萨节
  • 01:01比萨A的成分改变了
  • 01:02比萨A的成分改变了
  • 01:03撤消到01:01

如果愿意,可以定期扫描数据库并清理旧版本。“仅追加”样式的临时写入也可以带来性能优势。

“撤消”意味着服务器上的修改已经完成。我需要拦截服务器更新操作以保存实体状态以备将来撤消。若要仅在客户端上执行撤消,应将所有应用程序状态保留在客户端上。你认为这在GWT应用程序中是可能的吗?当然是,但你不需要整个应用程序状态,一些实体,比如通讯录应用程序中的联系人实体,是你感兴趣的“撤销”对象,对吗?不,你错了。例如,考虑一个联系人的有序列表。在RF中使用IsCaseReStestor还是仅仅请求调用持久性?