在GWT中恢复(撤消)实现

我们正在尝试使用GWT构建GUI框架。 我们发现很难在框架中实现取消function。

所需function如下:

我们有CRUD屏幕,有弹出窗口,网格等。 当用户更改GUI中的任何内容然后单击cancel()时,他应该收到一条通知消息,说明某些内容已更改。

我们尝试过的方法:

目前,我们正在尝试保留整个pojo对象的键值与值的哈希映射,并尝试将其与用户更改时更新的模型进行比较。 但是,当用户直接从后端添加数据时,这会在每个pojo中添加大量不需要的代码,并且无法正常工作。

有没有优雅的方法来实现这个function? 请注意* 我们的应用程序中没有使用GWT *的编辑器框架 (https://developers.google.com/web-toolkit/doc/latest/DevGuideUiEditors)。

示例:假设我有一个像这样的pojo:

public class Person { List
address; PhoneNumber phoneData; // and so on along with getters and setters }

我将如何为此编写通用克隆方法? 即使我设法以某种方式做到这一点,将导致每个pojo中的大量代码(我们的应用程序有数百个),这似乎是不正确的。

请注意,只要在GUI中更改了某些内容以实现实时绑定,我们的pojo就会更新。

您的表单中有“保存”和“取消”按钮吗?

我建议你改变这个概念。 在用户编辑它们时(例如在GMail,JIRA和许多其他现代应用程序中)在OnChange事件处理程序中立即更新对象属性。

将所有更新保存到会话堆栈作为UpdateAction对象,并让用户撤消调用UpdateAction.undo()方法的每个属性修改。

好处是:

  1. 这种设计比“点击”编辑“ – 更新 – 点击”保存“”方案更加用户友好。

  2. 您不需要单独的视图/编辑表单/弹出对话框 – 只需一个表单即可查看和编辑。