Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsp 双击表单的提交而不是两次提交_Jsp_Jakarta Ee_Struts 1_Double Submit Problem - Fatal编程技术网

Jsp 双击表单的提交而不是两次提交

Jsp 双击表单的提交而不是两次提交,jsp,jakarta-ee,struts-1,double-submit-problem,Jsp,Jakarta Ee,Struts 1,Double Submit Problem,当我们比较双击submit按钮和两次单击submit按钮后触发的事件时,逻辑流方面有什么区别 我有一个Struts 1应用程序(脏兮兮的设计),我无法理解双击时实际发生了什么 JSP如下所示,单击AddXitem将调用action类的doAdd()方法(在本例中,doAdd方法中str将为null),该方法将转发到xItemAdd.JSP jsp包含一个主表单,该表单带有几个复选框和一个加载按钮。单击“加载”按钮时,将调用加载doAdd,在会话属性中提取/放入所选复选框和列表框的值,并再次转发

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

我有一个Struts 1应用程序(脏兮兮的设计),我无法理解双击时实际发生了什么

JSP如下所示,单击AddXitem将调用action类的doAdd()方法(在本例中,doAdd方法中str将为null),该方法将转发到xItemAdd.JSP

jsp包含一个主表单,该表单带有几个复选框和一个加载按钮。单击“加载”按钮时,将调用加载doAdd,在会话属性中提取/放入所选复选框和列表框的值,并再次转发到xItemAdd.jsp

jsp包含用于在选中表单对应复选框时显示表单的脚本。因此,如果选中1和3复选框并单击“加载”,则现在将显示表单1和表单3

   <% for(int i=0;i<selmsgs.size();size++)
       {Systeml.out.println("i :"+i +"size "+selmsgs.size());
...%>
看起来好像有两个线程正在执行JSP scriplet

你能解释一下双击加载按钮与同时点击两次加载按钮之间的区别吗?因为两者都会提交两次表单


双击“加载”按钮后实际会发生什么情况?

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


按钮不是图标。双击对他们来说没有意义。用户应该知道按钮是一次点击的。如果应用程序的用户不知道这一点,您可能希望在处理提交之前使用javascript禁用单击按钮,以防止他们尝试双击。请参见

如果第二次单击速度不够快,则对第一次单击的响应可能已经呈现,在这种情况下,双击会有所不同。但是如果双击时向服务器发送了两个请求,则应该为每个单击/请求调用doAdd方法。可能是我遗漏了什么并且需要再次检查。据我记忆所及,doAdd只被调用了一次,而JSP被调用了两次。另外,浏览器如何知道是否要解析响应?是否必须首先收到第一个请求的响应?当您单击按钮两次时,浏览器会简单地抛出对第一个请求的引用(因为它只能在每个窗口/选项卡上执行一次),因此它会在服务器上得到处理,但浏览器不会等待它,而是等待第二个请求。
   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;   
       }
    }
i: 0 size :2

i:0 size  :1

i:1 size : 2