GXT KeyListener.componentKeyDown () немедленно закрывает MessageBox.alert () - PullRequest
1 голос
/ 28 марта 2009

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

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

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

1 Ответ

2 голосов
/ 28 марта 2009

Ключ 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;
        }
    });
}
...