天天看点

关于重复提交 (初) #spring#springmvc

第一次(自己理解后写的 粗略,没有加注解。):

原理,防止多次点击提交按钮 与重复提交的概念有些出入,并不是刷新页面啥的。

处理思路: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();'); 

                }

            }

        });

继续阅读