2010-12-28 5 views
5

Um zu klären, was Double Submit ist: Wenn der Benutzer zweimal auf einen Submit-Button klickt, verarbeitet der Server dieselben POST-Daten zweimal. Um dies zu vermeiden (abgesehen von der Deaktivierung der Schaltfläche nach einem einzelnen Senden), bieten die meisten Web-Frameworks wie Struts einen Token-Mechanismus. Ich suche nach dem Äquivalent dazu in GWT.Wie kann DoubleSubmit in einer GWT-Anwendung verhindert werden?

+1

hilfreich sein könnte, was das „Doppel einreichen Problem“ ist zu klären. –

+0

@Jason Hall dumme Benutzer Doppelklick auf Tasten und damit die gleiche Anfrage zweimal ausgelöst –

Antwort

2

Wenn Sie zweimal vermeiden wollen einreichen, wie etwa:

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); 
     }); 
     }); 
    } 
    } 
}); 

Das ist der Kern von ihm ist.

+0

Ich glaube, Sie möchten Button = event.getSource() zu der onClick() -Methode hinzufügen. – DwB

+0

Ich stellte mir vor, "Knopf" sei ein letztes Mitglied der Klasse, aber das sollte auch funktionieren. –

0

für Dich Dies wird hilfreich sein -

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(); 
        } 
       }); 
     } 
    });