1

ユーザーがウィンドウを閉じたり、更新したり、戻るボタンをクリックしたりしたときに、RPC呼び出しを実行しようとしています、1つのページだけです。処理について話している投稿を見つけましたが、解決策がうまく機能せず、戻るボタン ハンドラーが見つからず (機能していません)、常に Web 上のすべてのページに適用されます。ページから離れると、ハンドラーを削除するための何かが見つかりません。

    Window.addWindowClosingHandler(new Window.ClosingHandler() {

                @Override
                public void onWindowClosing(ClosingEvent event) {
                    event.setMessage("You sure?");
                }
            });

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

                @Override
                public void onClose(CloseEvent<Window> event) {

                    // Execute code when window closes!
                System.out.println("ble ! ");

                }
            });

フレームワーク: mvp4g を使用した GWT 2.4。
ブラウザ: FF および Chrome。

4

2 に答える 2

1

私はmvp4gフレームワークを使用しているので、そこで解決策を見つけました。CyclePresenterを使用してプレゼンターを拡張し、onLoadメソッドとonUnloadメソッドをオーバーライドする必要があります。これらのメソッドは、ビューがDOMからロード/アンロードされるときに起動します。テストして、すべてのケースで機能します。f5、戻るボタン、ブラウザー/タブを閉じる、他のWebに移動し、他のイベントを呼び出します。今、私はそこにいくつかのコードを置くことができません。

于 2012-08-03T16:11:05.057 に答える
0

ページを離れるときにハンドラーを削除し、ページに再び入るときにハンドラーを再度追加する必要があります。上記のコードでカバーされている「追加」側があり、「削除」部分がありません。HandlerRegistrationこれを行うには、メソッドから返されるオブジェクトを使用しますadd*Handler。登録済みのハンドラーを削除したい場合は、次のHandlerRegistration.removeHandler()メソッドを呼び出すだけです。

HandlerRegistration windowClosingHandler = Window.addWindowClosingHandler(new ClosingHandler() {
    @Override
    public void onWindowClosing(ClosingEvent event) {
        // Handle window closing
    }
});
// From now on the CloseHandler will be fired

// ...
// Somewhere else:
windowClosingHandler.removeHandler();
// From now on the CloseHandler won't be fired
于 2012-08-03T13:12:35.373 に答える