java - 如何在基于 Spring MVC 的 Web 应用程序中创建撤消功能?

标签 java spring model-view-controller history undo

我有一个员工和相应的员工历史记录表。

两个表具有相同的结构。历史表用于跟踪员工在一段时间内的历史变化。

现在,我需要为对员工所做的更改添加撤消功能。

例如员工职称于 8 月 1 日发生变更。现在,这将更新 Employee 表中的员工头衔,并在 employee_history 表中插入相应的历史记录。

现在,我需要撤消此更改。员工编辑页面将包含按日期对员工所做的更改列表,旁边有一个撤消按钮。

单击“撤消”应将 Employee 表中的更改恢复为之前的值。另外我认为历史表中显示标题已更改的记录也应该删除。

此外,当我恢复对员工表的更改(即将标题恢复为以前的标题)时,这将触发对历史表的​​插入,这是我不想要的。

我不确定最好的方法是什么。

任何建议都会有帮助。

最佳答案

如果您想要实现“持久”撤消 - 在应用程序重新启动/ session 超时后仍能保留的撤消,您应该考虑扩展数据库架构宽度 timestamp 字段,并删除最后一个条目或将其替换为适当的早期条目。

“轻型”版本将使用堆栈来存储最后的交互,包括原始值和新值。当然,您可以在 session 失效时保留堆栈以结合这两种方法。这似乎就是您实际上正在做的事情。

您可以通过为每个更改创建和存储或导出 SQL 迁移脚本、记录更改以及(如果可能)相反的操作来扩展此解决方案。因此,您甚至可以在应用程序实例和环境之间传输脚本,并且可以完全“重玩”数据库状态。

tl;dr - 看来您已经实现了一个很好的解决方案

关于java - 如何在基于 Spring MVC 的 Web 应用程序中创建撤消功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11760562/

相关文章:

java - 每个 spring 源代码 ide 的 springframework.org/tags 表单的 Maven 引用?

java - 显示对话框的软键盘

java - Android 多点触控 - TouchMove 事件中的 IllegalArgumentException

java - 无法连接到 Eureka 服务器。异常 : java.net.ConnectException:连接被拒绝:连接

jquery - JSON 值为空

spring - 带有泛型类的 CRUD(dao、service)

ruby-on-rails - 如何将私有(private)提交与事件提要一起使用?

grails - 一 View 和Grails中的多个域/ Controller

java - 使用 Spring Data Rest 在集合上公开超媒体链接,即使它是空的

java - 执行 UTF-8 Base64 编码/解码 Java 后出现奇怪的字符