怎么防止页面被重复刷新,我做了一个购物车,往里面添加商品,但是我刷新一次就会自动增加一个商品,怎么防止页面重复提交?前辈们,急急急

解决方案 »

  1.   

    可以使用ajax提交,也可以在提交完成后,跳转到其它页面,然后再跳转回来。
      

  2.   

    你用的是struts2么,如果是的话问题在于result那里你是用的请求转发,改成重定向就可以了type=redirect
      

  3.   

    客户端与服务端:
    客户端使用JS变量,服务端使用session变量
    <%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    //设置标志变量SubmitFlag值
    session.putValue("SubmitFlag","announce_add.jsp"); 
    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'index.jsp' starting page</title>
    <script type="text/javascript">
    submitF = function(){
    var submitFlag = false;
    if(submitFlag){
    window.alert("禁止重复提交!");
    }
        submitFlag = true;
        document.forms[0].submit();
        }
    </script>
      </head>
      
      <body>
        <form action="" id="mform">
        <input type="file" name="myphoto" id="myphoto" value="选择图片"/>
        <input type="submit" value="提交" onclick="submitF()"/>
        </form>
      </body>
    </html> PageFlag=(String) session.getValue("SubmitFlag");
    if (PageFlag.equalsIgnoreCase("Over")){
    System.out.println("不能重复提交页面!"); 
    return "repeatSubmit";
    }
    //设置标志变量SubmitFlag值为Over,表示已经提交
        session.putValue("SubmitFlag","Over");
      

  4.   

    ##############################
    PageFlag=(String) session.getValue("SubmitFlag");
     if (PageFlag.equalsIgnoreCase("Over")){
     System.out.println("不能重复提交页面!");  
    return "repeatSubmit";
     }
     //设置标志变量SubmitFlag值为Over,表示已经提交
       session.putValue("SubmitFlag","Over");
    ##############################此段代码是服务端防重复提交,放在servlet(包括struts的action)中
      

  5.   

    jsp那本黄色的书上有,叫精通JSP Web开发什么的....
      

  6.   

    token或者页面加上当前的时间做参数,就不会重复刷新了
      

  7.   

     我不知道你是想要用哪种方式,如果你已经学过struts2的话可以用3楼说的做,如果你学了struts1可以用2楼说的token做,或者这样做,在struts1的Action里跳转到另一个方法,然后再跳转到jsp页面,这样比token跟简单,也容易理解
    public class UserAction extends DispatchAction {
    //这是你从jsp页面跳转进来的
    public ActionForward add(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) {
    //添加代码

    return new ActionForward("/shopCar.do?add2",true);
    }
    //这是你的一个中间方法,这个方法已经失去了request,response,所以能避免重复添加
    public ActionForward add2(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) {
    //添加代码

    return new ActionForward("/shopCar.do?add2");
    }
    }如果你都没学,只是学了<%%>
    也可以用一个中间页面做处理,在中间页面把request跟response失去,这样就不会重复添加了!