2010-12-28 3 views
5

Чтобы уточнить, что представляет собой двойной запрос: когда пользователь дважды нажимает кнопку отправки, сервер будет обрабатывать одни и те же данные POST дважды. Чтобы избежать этого (кроме отключения кнопки после одного представления), большинство веб-фреймворков, таких как Struts, обеспечивают механизм маркера. Я ищу эквивалент этого в GWT.Как предотвратить использование DoubleSubmit в приложении GWT?

+1

Может быть полезно уточнить, что «двойная представить проблему». –

+0

@ Jason Hall глупые пользователи дважды нажимают кнопки и, следовательно, тот же запрос стреляет дважды –

ответ

2

Если вы хотите, чтобы избежать отправки в два раза, как насчет:

boolean processing = false; 
button.addClickHandler(new ClickHandler() { 
    @Override 
    public void onClick(ClickEvent event) { 
    if (!processing) { 
     processing = true; 
     button.setEnabled(false); 
     // makes an RPC call, does something you only want to do once. 
     processRequest(new AsyncCallback<String>() { 
     @Override 
     public void onSuccess(String result) { 
      // do stuff 
      processing = false; 
      button.setEnabled(true); 
     }); 
     }); 
    } 
    } 
}); 

Это суть его.

+0

Я считаю, что вы хотите добавить button = event.getSource() в метод onClick(). – DwB

+0

Я предполагал, что 'button' будет последним участником класса, но это тоже должно работать. –

0

Это будет полезно для вас -

final Button btn = new Button("Open"); 
    btn.addSelectionListener(new SelectionListener<ButtonEvent>() { 
     @Override 
     public void componentSelected(ButtonEvent ce) { 

        btn.setEnabled(false); 

        openMethod(name, new AsyncCallback<Void>() { 

         public void onFailure(Throwable caught) { 
           btn.setEnabled(true); 
        } 
        public void onSuccess(Void result) { 
         MessageBox.alert(info, "Opened Window", null); 
         btn.setEnabled(true); 
         window.hide(); 
        } 
       }); 
     } 
    }); 
Смежные вопросы