最近自己在做一个Wiki,采用的struts1。遇到一个问题,就是如何避免多人编辑同一个页面。
先是这么设计的,
在数据库中page对象中添加一个锁属性(locked)。
locked=0表示未加锁,可编辑。locked>0时,表示UserId=valueOf(locked)的这个用户正在编辑,其他人点击编辑按钮时,提示加锁信息。
当用户编辑完页面点击保存按钮时,解锁。同时提供一个取消按钮,也执行解锁操作。解锁即将locked值改为0
基本上都实现了,但是在解锁上遇到了新问题。
问题1:出现异常情况时,无法解锁,如死机等
问题2:离开页面时没有解锁,如关闭,点击链接跳转等
个人解决设想:对问题1,在对象中加一个新属性locked_time,然后在系统中做个定时器,定时解锁那些加锁超过规定时间的对象
对问题2,使用window.onunload来监听,但是当只刷新页面时,也会解锁。
这两个问题已经困扰我很长时间了,希望各位给指点一下.....谢谢
都用locked_time就行了
用户打开一个页面,然后忘记了,也不能一直等着他
1.进入编辑状态,记录locked_time为当前时间
2.用户的界面做超时提醒,时间到或点取消用js提交请求清除locked_time
3.意外退出的情况,进入编辑状态前先检测locked_time的时间,如果为空或者locked_time的时间离现在时间超出规定的时间,则通过,否则返回Fasle
用CVS那样的版本控制,编辑时取当前版本,比如3个人同时取到1.1
当A先保存时更新为1.2,当B或C保存时提示,当前版本1.1 != 1.2,不能保存
我看楼主的需求是否是这个意思:
多个人同时编辑一个同一个页面,可能会造成同一条数据的内容冲突,出现相互覆盖的问题,为了避免这种情况,我觉得采用版本控制的方式比较好,思路同楼上这位:数据成功保存后,版本按固定算法递增。
这样就绕过了楼主提到的这两个问题“问题1:出现异常情况时,无法解锁,如死机等。问题2:离开页面时没有解锁,如关闭,点击链接跳转等。”,必须要保存成功后,才会有版本的递增。