1

アプリを開いたままブラウザウィンドウを閉じると、httpセッションも終了したいと思います。GWTでウィンドウを閉じるときにコードを実行しようとしましたが、onCloseメソッドに配置したものは実行されません。

Window.addCloseHandler(new CloseHandler<Window>()
    {

        @Override
        public void onClose(CloseEvent<Window> event)
        {
            //Code in here never executes!
            alert("Hi");
            Window.Location.replace(GWT.getHostPageBaseURL() + "logout.jsp");
        }
    });
4

1 に答える 1

0

実際に使用できる方法は2つあります。

  • Window.addWindowClosingHandlerClosingEventJavaScriptのによって起動されるのレジスタ$wnd.onbeforeunload
  • Window.addCloseHandlerCloseEventJavaScriptのによって起動されるのレジスタ$wnd.onunload

を参照WindowImpl.initWindowCloseHandler()してください。WindowImplIE

ClosingEventは、CloseEventよりも少し早く発生します。

(とのWindow.addWindowCloseListener両方を効果的に登録する3番目のメソッドがありますが、そのメソッドは非推奨です。)$wnd.onbeforeunload$wnd.onunload

アラートが表示されない理由は、おそらく次のjavadocで説明されていますClosingHandler.onWindowClosing()

 * Fired just before the browser window closes or navigates to a different
 * site. No user-interface may be displayed during shutdown.

そして、代わりにWindow.location.replace()、ログアウトのためにajax呼び出しを行う必要があります(たとえば、GWT-RPCまたはRequestBuilderを使用して)。ユーザーがウィンドウを閉じるため、その場所を置き換えることはできなくなります。

于 2012-10-16T11:08:44.680 に答える