第一次(自己理解后写的 粗略,没有加注解。):
原理,防止多次点击提交按钮 与重复提交的概念有些出入,并不是刷新页面啥的。
处理思路: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();');
}
}
});