2013-11-06 3 views
0

В чем разница между логическими потоками, когда мы сравниваем события, которые запускаются после двойного щелчка на кнопке отправки и двух кликов по ней?Дважды нажмите кнопку «Отправить форму» или «Отправить дважды»

У меня есть приложение Struts 1 (грязно разработанное), и я не могу понять, что на самом деле происходит при двойном щелчке.

СПЯ как ниже, нажмите на ссылку Добавить xItem вызывает метод doAdd() класса действий (в этом случае ул будет аннулирована в методе doAdd), который передает в xItemAdd.jsp

enter image description here

xItemAdd.jsp содержит первичную форму с несколькими флажками и нагрузка button.On щелкающих нагрузками doAdd называется, где значение выбранных флажков и ListBox забирается/поместить в атрибуте сеанса и вперед снова xItemAdd.jsp

enter image description here

xItemAdd.jsp содержит скриптлеты для отображения формы, если их соответствующие флажки checked.So Теперь Form1 и Форма Form3 отображаются, если были выбраны 1 и 3 флажков и загрузка была нажата

<% 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 d, если он снова щелкнут, формы (для выбранных флажков) загружаются и остаются такими же, как на рисунке 3 Но в случае двойного щелчка на кнопке «Загрузить» появляется странное поведение, каждая выбранная форма появляется снова. Так, на рисунке 3 быть как форма 1, Form3 и снова Form1, Form3

После того, как метод doAdd возвращает JSP вызывается дважды, и печать строки в JSP, как на рисунке 3 печатает нечто вроде

i: 0 size :2 

i:0 size :1 

i:1 size : 2 

Появляется, как если бы два потока выполняются JSP-скрипт

Не могли бы вы объяснить разницу поведение между двумя щелчками мыши на кнопке загрузки здесь против двух одновременных кликов по нему, поскольку оба будут отправлять форму дважды?

Что на самом деле происходит после двойного нажатия на кнопку загрузки?

ответ

0

Двойной щелчок на кнопке отправки - это два клика. Первый будет отправлен на сервер, который будет обрабатываться беззвучно (так как в браузере не будет получен ответ, хотя сервер его отправит), а второй также будет обработан на сервере, но браузер получит ответ.

Кнопки - это не значки. Двойной щелчок не имеет для них смысла. Пользователи должны знать, что кнопки одного клика. Если пользователи вашего приложения этого не знают, вы можете использовать javascript для отключения кнопки при нажатии перед обработкой отправки, чтобы предотвратить двойное нажатие. См. https://stackoverflow.com/questions/5944254/preventing-double-click-of-submit-button

+0

Если второй клик не является достаточно быстрым, ответ на первый клик уже будет отображен, и в этом контексте двойной щелчок будет другим.но если в случае двойного щелчка на сервер отправляется два запроса, тогда метод doAdd должен быть вызван для каждого из кликов/запросов. Может быть, я что-то упустил и вам нужно снова проверить. Насколько я помню, doAdd получил вызываемый только один раз, но JSPS вызывается дважды. Также как браузер знает, следует ли анализировать ответ или нет? Нужно ли сначала получать ответ на первый запрос? – user2863649

+0

Когда вы дважды нажимаете кнопку, браузер просто бросает ссылку на первый запрос (потому что он может делать только один за окно/вкладку), поэтому он обрабатывается на сервере, но браузер не ждет его, его ждет второй. – developerwjk

Смежные вопросы