双击表单提交与提交两次

时间:2013-11-06 21:32:08

标签: jsp java-ee struts-1 double-submit-problem

当我们比较双击提交按钮后触发的事件和两次单击时,逻辑流方面有什么区别?

我有一个Struts 1应用程序(设计很脏),我无法理解双击实际发生的情况。

JSP如下所示,单击Add xItem调用动作类的doAdd()方法(在本例中,str在doAdd方法中为null),该方法转发给xItemAdd.jsp

enter image description here

xItemAdd.jsp包含一个主窗体,其中包含很少的复选框和一个加载按钮。在单击加载时调用doAdd,其中选中复选框和列表框的值被提取/放入会话属性并再次转发到xItemAdd.jsp

enter image description here

xItemAdd.jsp包含用于在选中相应复选框时显示表单的scriptlet。如果选中了1和3复选框并单击了Load,则显示Form1和Form3

   <% for(int i=0;i<selmsgs.size();size++)
       {Systeml.out.println("i :"+i +"size "+selmsgs.size());
...%>

enter image description here

以下是动作类的片段

   Class MyAction

    {...
     public Object doAdd(.......)
       { System.out.println("Add method :");
       String[] str=request.getParameter("SelectionList");
        ArrayList<String>[] mylist=request.getParameter("CheckedValues").split(',');
         //Allowing duplicate values to be added in mylist
        if(str!=null&&str.equals("true")
          request.getSession.setAttribute("IsLoaded","false"); 

        if(str!=null)
        {
         request.getSession.setAttribute("ObjectList",mylist);
        request.getSession.setAttribute("IsLoaded","true"); 
        }
       return SUCCESS;   
       }
    }

只需单击图2中的“加载”按钮,预期视图将变为图3,如果再次单击,则会加载表单(对于所选复选框),并保持如图3所示 但是如果双击Load按钮会出现奇怪的行为,每个选中的表单都会重复出现。所以图3就像Form 1,Form3和Form1,Form3

doAdd方法返回后,JSP被调用两次,jsp中的打印行如图3所示打印出类似

的内容
i: 0 size :2

i:0 size  :1

i:1 size : 2

看起来好像两个线程正在执行JSP scriplet

你能否解释一下双击这里的加载按钮与两次同时点击之间的行为差​​异,因为两者都会提交表格两次?

双击加载按钮后实际发生了什么?

1 个答案:

答案 0 :(得分:0)

双击提交按钮是两次单击。第一个将被发送到服务器以进行静默处理(因为在浏览器中将不会收到响应,尽管服务器将发送它),第二个也将在服务器上处理,但浏览器将收到响应。

按钮不是图标。双击对他们没有意义。用户应该知道按钮是单击的。如果您的应用程序的用户不知道,您可能希望在处理提交之前使用javascript来禁用单击按钮,以防止他们尝试双击。见https://stackoverflow.com/questions/5944254/preventing-double-click-of-submit-button