防止表单重复提交&刷新

表单重复提交


方法1:

  <script type="text/javascript">
      var iscommitted=false;
      function dosubmit(){
        if(!iscommitted){
            iscommitted=true;
            document.getElementById("tbn").disabled="disabled";
            return true;
        }else{ 
        return false;
        }
    }
  </script>

<form action="/day07/servlet/doFormServlet" method="post" onsubmit="return dosubmit()">
用户名:<input type="text" name="username"/>
    <input id="btn" type="submit" value="提交"/>
</form>

方法二

 <script type="text/javascript">
      var iscommitted=false;
      function dosubmit(){
        if(!iscommitted){
            iscommitted=true;
            document.getElementById("tbn").disabled="disabled";
            return true;
        }else{ 
        return false;
        }
    }
  </script>

    <form action="/day07/servlet/doFormServlet" method="post" onsubmit="return dosubmit()">
      用户名:<input type="text" name="username"/>
      <input id="btn" type="submit" value="提交"/>
      <input name="token" type="hidden" value="${token}"/>
    </form>

刷新重复提交

方法1:重定向解决
这是shuaxin.jsp

<script src="./js/jquery-1.8.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
function shua(){
    var id=$("#id").val();
    location.href="<%=request.getContextPath()%>/personServlet?method=add&id="+id;  
}
</script>
</head>
<body>
<input type="text" name="id" id="id">
<button onclick="shua()">点我呀</button>
</body>

这是personServlet 用response.sendRedirect
跳转会改变地址所以可以防止

private void add(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
// TODO Auto-generated method stub
String id = request.getParameter("id");
List list = (List)request.getSession().getAttribute("list");
if(list==null){
    list=new ArrayList<String>(); 
    request.getSession().setAttribute("list", list);
}
list.add(id);
request.setAttribute("aa", "你大爷");//得不到因为用的是重定向只能转发session的数据
//防止刷新再次提交id;因为转发地址不变http://localhost:8080/test_serialize/personServlet?method=add&id=2
response.sendRedirect("/test_serialize/bianli.jsp");
//request.getRequestDispatcher("/bianli.jsp").forward(request, response);

    }

这是bianli.jsp

<body>
<c:forEach items="${list }" var="l">
<p>${l}</p>
</c:forEach>
${aa }
//这里的aa得不到因为重定向后就无法得到request域中的值只能遍历session的值
</body>

方法二:session解决
先在shuaxin.jsp给session设值

<%
    session.setAttribute("type", "new");
%>

<input type="text" name="id" id="id">
<button onclick="shua()">点我呀</button>

然后在servlet里取值判断,转发到bianli.jsp的时候remove掉sessiontype的值

String type =(String) request.getSession().getAttribute("type");
if(type==null){
request.getRequestDispatcher("/bianli.jsp").forward(request, response);
}else{

String id = request.getParameter("id");
List list = (List)request.getSession().getAttribute("list");
if(list==null){
    list=new ArrayList<String>(); 
    request.getSession().setAttribute("list", list);
}
list.add(id);
request.getSession().removeAttribute("type");
request.getRequestDispatcher("/bianli.jsp").forward(request, response);
}

最后转发到bianli.jsp中

因为bianli.jsp没有给session赋值所以传到servlet中session为空那么就直接跳转到bianli.jsp中

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值