2009-03-27 7 views
1

В GXT методы MessageBox являются асинхронными, что означает, что приложение не «блокируется», пока отображается окно сообщения.GXT KeyListener.componentKeyDown() немедленно закрывает MessageBox.alert()

Я использую KeyListener для обработки нажатия клавиш в форме (чтобы увеличить удобство использования, то есть разрешить отправку формы клавишей ввода) и впоследствии отключить поля формы, в то время как приложение обрабатывает учетные данные пользователя. Если они неверны, я показываю MessageBox.alert(), а затем снова включаю поля формы. Однако, поскольку alert() сразу возвращается, поля формы снова становятся доступными снова, что позволяет пользователю вводить данные без закрытия предупреждения.

Решение заключается в использовании обратного вызова в alert(); однако вводное нажатие не только приводит к отправке формы, но также приводит к немедленному отклонению предупреждения (как если бы форма и поле сообщения обрабатывали ключ ввода). Как я могу открыть окно предупреждения до тех пор, пока пользователь не начнет вводить его во второй раз или не нажмет кнопку «ОК»?

ответ

2

Ключ DeferredCommand обеспечивается GWT:

Этот класс позволяет выполнять код после того, как все в настоящее время на рассмотрении обработчики событий завершили, используя addCommand(Command) или addCommand(IncrementalCommand) методы. Это полезно, когда вам нужно выполнить код вне контекста текущего стека.

if(!validate()) 
{ 
    DeferredCommand.addCommand(new Command() { 
     public void execute() { 
      MessageBox.alert("Error", "You must enter a username and password.", alertListener); 
      return; 
     } 
    }); 
}