2009-03-27 8 views
1

GXTでは、MessageBoxメソッドは非同期です。つまり、メッセージボックスが表示されている間にアプリケーションが「ロックアップ」しないことを意味します。GXT KeyListener.componentKeyDown()はすぐにMessageBox.alert()を閉じます

私はを使用して、フォームの入力キーの処理(使いやすさを向上させる、つまり入力キーによるフォームの送信を許可する)を行い、アプリケーションがユーザーの資格情報を処理している間にフォームフィールドを無効にします。それらが間違っている場合、私はMessageBox.alert()を表示し、フォームフィールドを再度有効にします。ただし、すぐにalert()が返されるので、フォームフィールドは直ちに再び利用可能になり、ユーザーはアラートを閉じずにデータを入力できます。

解決策は、alert()でコールバックを使用することです。ただし、入力キーを押すだけでフォームが送信されるだけでなく、フォームとメッセージボックスの両方でEnterキーが処理されているかのように、アラートが直ちに解除されます。ユーザーがもう一度Enterを押すか「OK」ボタンをクリックするまで、アラートボックスを開いたままにするにはどうすればよいですか?

答えて

2

キーがGWTが提供するDeferredCommandです:

このクラスは、すべての現在保留中のイベントハンドラが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; 
     } 
    }); 
} 
関連する問題