GXT KeyListener.componentKeyDown () chiude immediatamente MessageBox.alert ()
-
22-08-2019 - |
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"?
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)
oaddCommand(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;
}
});
}