Spring MVC中防止Form重复提交

环境: UI:easyui、Spring3.0、hibernate3

问题:ajax封装spring form标记内所有标记、提交至inser.do或update.do方法、某些情况下(网络环境差)发生单据重复创建或重复执行统一方法数次。

要求:一个方法未执行完毕不允许再次提交表单、页面不跳转


status2做法:s:token标签加配拦截器

在Form创建前生成一个唯一编号放入Session中(HashMap存储)同时放入表单中,之后跳转到其他JSP或Action,执行Action前拦截器拦截如果Session中有Token,表示第一次提交,如果没有表示重复提交,第一次提交后立即将Seesion中Token删除,如果是页面不跳转,继续修改内容,则次方法不可行。


Spring 拦截器:

笨方法:Form提交附加一个Token(唯一编号),拦截器DenyDuplicateFormSubmitInterceptor方法继承HandlerInterceptorAdapter类,覆写preHandle方法,将Token放入Session中,等待方法执行完毕,覆写postHandle方法中将Token删除。执行方法前拦截 ,Token put到Session,使用synchronized。执行方法前搜索Session中Token是否存在,不存在放行,存在不放行(重复提交返回false)


效率和功能测试中....

你可能感兴趣的:(spring mvc)