Двойной клик по отправке формы против отправки дважды
В чем разница с точки зрения логического потока, когда мы сравниваем события, которые запускаются после двойного щелчка на кнопке отправки и двух кликов по ней?
У меня есть приложение Struts 1 (грязно разработанное), и я не могу понять, что на самом деле происходит двойным щелчком мыши.
JSP, как показано ниже, при нажатии Add xItem вызывает метод doAdd () класса действия (в этом случае str будет нулевым в методе doAdd), который пересылается в xItemAdd.jsp
xItemAdd.jsp содержит первичную форму с несколькими флажками и кнопкой загрузки. При нажатии load вызывается doAdd, где значение выбранных флажков и списка выбирается / помещается в атрибут сеанса и снова пересылается в xItemAdd.jsp
xItemAdd.jsp содержит скриптлеты для отображения форм, если установлены соответствующие флажки. Теперь Form1 и Form3 отображаются, если установлены флажки 1 и 3 и нажата кнопка "Загрузить".
<% for(int i=0;i<selmsgs.size();size++)
{Systeml.out.println("i :"+i +"size "+selmsgs.size());
...%>
Вот фрагмент класса действий
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, но в случае двойного нажатия на кнопку "Загрузить" странное поведение, каждая выбранная форма повторяется. Так что рисунок 3 будет похож на форму 1, форму 3 и снова форму 1, форму 3
После возвращения метода doAdd JSP вызывается дважды, и строка печати в jsp, как на рисунке 3, печатает что-то вроде
i: 0 size :2
i:0 size :1
i:1 size : 2
Похоже, что два потока выполняют сценарий JSP
Можете ли вы объяснить разницу в поведении между двойным щелчком по кнопке загрузки здесь и двумя одновременными щелчками по ней, когда оба отправят форму дважды?
Что на самом деле происходит после двойного нажатия на кнопку загрузки?
1 ответ
Двойной щелчок на кнопке отправки - два клика. Первый будет отправлен на сервер для автоматической обработки (так как в браузере не будет получен ответ, хотя сервер его отправит), а второй также будет обработан на сервере, но браузер получит ответ.
Кнопки не значки. Двойной щелчок не имеет смысла для них. Пользователи должны знать, что кнопки являются одним щелчком мыши. Если пользователи вашего приложения этого не знают, вы можете использовать javascript, чтобы отключить нажатие кнопки перед обработкой отправки, чтобы они не пытались выполнить двойной щелчок. См. https://stackru.com/questions/5944254/preventing-double-click-of-submit-button