第一次(自己理解后写的 粗略,没有加注解。):
原理,防止多次点击提交按钮 与重复提交的概念有些出入,并不是刷新页面啥的。
处理思路:session设置token ,页面设置个隐藏域等于token,每次验证成功后进后台取session中的token值与隐藏域提交上来的token值匹配 若是相同 则为一次提交,马上修改session中的token值,此时只有刷新页面 页面提交的token值才会与session中修改后的token值一样,所以判断如果session中的token值与页面提交的token值不相同则返回 跳出。不进行数据库操作。
前段代码:
<input id="token" type="hidden" name="token" value="${token}"/>
后端代码:
String token = request.getParameter("token");
if(null==token||StringUtils.isEmpty(token)){ HttpSession session =request.getSession(); if(session.getAttribute("token")!=null){ session.removeAttribute("token"); } session.setAttribute("token",StringUtils.generateId()); }else{ String sessionToken = (String) request.getSession().getAttribute("token"); if(token.trim().equals(sessionToken.trim())){ HttpSession session =request.getSession(); session.removeAttribute("token"); session.setAttribute("token", StringUtils.generateId()); }else{ addMessage(redirectAttributes, "请不要重复提交数据"); return "redirect:" + Global.getAdminPath() + "/yhxx/htddxxb/htddlb?repage"; } }
--------------------工具类
public static String generateId() { String s = UUID.randomUUID().toString().toUpperCase(); //去掉- return s.substring(0, 8) + s.substring(9, 13) + s.substring(14, 18) + s.substring(19, 23) + s.substring(24); }
第二次(关于前端ajax防止重复提交):思路,加一个参数,beforeSend:
$.ajax({ type: 'post', url: '${ctx}/jskj/sjzx/insertJsl', data: $("#insertJsl").serialize(), async: true, beforeSend:function(){//此为触发ajax之前防止重复提交的方法 $('#tckbSubButton').val('提交中...'); $('#tckbSubButton').attr('onclick','javascript:void();'); }, success: function(data){ if(data=="true"){ alert("保存成功!"); $('#tckbSubButton').val('确定'); $('#tckbSubButton').attr('onclick','addjsl();'); } } });