Domanda

In GXT, metodi MessageBox sono asincrone, il che significa che l'applicazione non "lock-up", mentre è visualizzata la finestra di messaggio.

I usando un KeyListener per elaborare entrare tasti premuti in una forma (per aumentare l'usabilità, cioè, permettendo al modulo venga inviato dal tasto enter) e successivamente disattivando i campi del modulo, mentre l'applicazione elabora le credenziali dell'utente. Se non sono corretti, mostro un MessageBox.alert() e quindi riattivare i campi del modulo. Tuttavia, dal momento che alert() ritorna immediatamente, i campi del modulo sono immediatamente resi nuovamente disponibili, permettendo all'utente di dati di input senza chiudere l'avviso.

La soluzione è quella di utilizzare un callback in alert(); tuttavia, la pressione di un tasto entrare non provoca solo la forma a presentare, ma provoca anche l'avviso di licenziare immediatamente (come se sia la forma che la finestra di messaggio elaborano il tasto Invio). Come faccio a mantenere la casella di avviso aperto fino l'utente preme entrare una seconda volta o fa clic sul pulsante "Ok"?

È stato utile?

Soluzione

La chiave è DeferredCommand fornito da GWT :

  

Questa classe consente di eseguire codice dopo i gestori di eventi tutti attualmente in corso hanno completato, utilizzando i metodi addCommand(Command) o addCommand(IncrementalCommand). Questo è utile quando è necessario per eseguire codice al di fuori del contesto dello stack corrente.

if(!validate())
{
    DeferredCommand.addCommand(new Command() {
        public void execute() {
            MessageBox.alert("Error", "You must enter a username and password.", alertListener);
            return;
        }
    });
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top