GXT KeyListener.componentKeyDown () fecha imediatamente MessageBox.alert ()
-
22-08-2019 - |
Pergunta
Em GXT, métodos MessageBox
são assíncronas, o que significa que a aplicação não "travar" enquanto a caixa de mensagem é exibida.
I utilizando um processo de KeyListener
para entrar teclas pressionadas numa forma (para aumentar a facilidade de utilização, isto é, permitindo que a forma a ser submetida pela chave de entrada) e em seguida desactivando os campos do formulário enquanto a aplicação processa as credenciais do utilizador. Se eles estiverem incorretos, eu mostro um MessageBox.alert()
e em seguida, reabilitar os campos do formulário. No entanto, desde alert()
retorna imediatamente, os campos do formulário são imediatamente disponibilizados novamente, permitindo que o usuário para entrada de dados sem fechar o alerta.
A solução é usar um callback em alert()
; no entanto, a entrar keypress não só faz com que o formulário para enviar, mas também faz com que o alerta para descartar imediatamente (como se tanto a forma ea caixa de mensagem estão processando a tecla enter). Como faço para manter a caixa de alerta aberto até o usuário pressiona entrar pela segunda vez ou clica no botão "Ok"?
Solução
A chave é DeferredCommand
fornecido por GWT :
Esta classe permite que você execute código após todos os manipuladores de eventos actualmente pendentes tenham concluído, utilizando os métodos
addCommand(Command)
ouaddCommand(IncrementalCommand)
. Isso é útil quando você precisa executar fora do código do contexto da pilha atual.
if(!validate())
{
DeferredCommand.addCommand(new Command() {
public void execute() {
MessageBox.alert("Error", "You must enter a username and password.", alertListener);
return;
}
});
}