2010-12-28 6 views
5

Per chiarire quale doppio invio è: quando l'utente fa clic due volte su un pulsante di invio, il server elaborerà gli stessi dati POST due volte. Per evitare ciò (oltre a disabilitare il pulsante dopo una singola sottomissione), la maggior parte dei framework Web come Struts forniscono un meccanismo di token. Sto cercando l'equivalente di questo in GWT.Come impedire DoubleSubmit in un'applicazione GWT?

+1

potrebbe essere utile per chiarire ciò che il "doppio presentare problema" è. –

+0

@Jason Hall utenti stupidi fanno doppio clic sui pulsanti e quindi la stessa richiesta viene attivata due volte –

risposta

2

Se si vuole evitare la presentazione due volte, come su:

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

Questo è l'essenza di esso.

+0

Credo che si voglia aggiungere button = event.getSource() al metodo onClick(). – DwB

+0

Stavo pensando di avere il pulsante 'come membro finale della classe, ma dovrebbe funzionare anche questo. –

0

Ciò sarà utile per voi -

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