0

アプリケーションの onModuleLoad() に次のコードがあります。

    Window.addWindowClosingHandler(new ClosingHandler() {
        @Override
        public void onWindowClosing(ClosingEvent event) {
            event.setMessage("If you choose to close, application will sign out");
        }   
    });

    //sign out on close
    Window.addCloseHandler(new CloseHandler<Window>() {
        @Override
        public void onClose(CloseEvent<Window> event) {
            sendLogout();
        }
    });

sendLogout() 関数は次のようになります。

// Set up the callback object.
    AsyncCallback<String> callback = new LogoutCallback(this);
    // Make the call to the survey service.

    SurveySystemService.Util.getInstance().logout(details, callback);

「詳細」はオブジェクトです。

ウィンドウを閉じると問題なく動作しますが、ページを更新しようとするとログアウトしません。私が考えたのは、呼び出しが非同期であるため、モジュールが再起動される前にサーバーへのメッセージの送信が完了していないということです。

私は試しました: 1. onClose メソッド内でコールバックを作成して呼び出します。2.タイマーを使用して、呼び出しが行われたかどうかを確認します。3. 上記と同じようにチェックする無限ループ (私は絶望的になりました)。

これらすべてのソリューションで、プログラムはコールバックの作成に到達しますが、サーバーは何も受信しませんでした。

これについて何か助けはありますか?

4

1 に答える 1

0

ページが最初に読み込まれるたびにログアウトを呼び出すことができますか。Web のステートレスな性質により、GWT アプリケーションは、誰かが更新を行っているのか、単にページに移動しているのかの違いを認識できません。

ID 変数をセッション ストレージに格納できます。このストレージは、ブラウザー ウィンドウまたはタブが閉じられるまで保持されます。アプリケーションの開始時に ID 変数がセッション ストレージに存在する場合は、それを使用してログアウトをトリガーできます。

于 2012-06-04T23:49:18.633 に答える