1

gwt-platform、objectify、appengine (Java) を使用しています。

ベスト プラクティスに従って、ユーザーおよびセッション管理システムを作成しようとしています。これをアプリケーションで再利用可能なモジュールにしたいと考えています。

私のアプリケーションには、gwt-platform の Dispatch モジュールに基づいて、ログイン アクションとログアウト アクションがあります。

アプリケーションに入ると、ログイン画面が表示され、すべて正常に動作します。プレゼンター間を移動してからログアウト ボタンを押すと、ログアウト アクションが複数回実行されているか、その他のアクションが実行されていることがわかります。アクション (一度だけ実行する必要があります) の実行回数は、プレゼンター間を移動する回数に正比例するようです。

プロジェクトのソース コードは、http ://code.google.com/p/gwt-platform-appengine-session-login-example/ でホストされています。

誰かが私に何が間違っているかのヒントを与えることができれば、それは素晴らしいことです. また、誰かがプロジェクトに貢献したい場合は、助けていただければ幸いです。私にメールを送ってください。

4

1 に答える 1

4

問題は、メソッドのログアウト ボタンに EventHandler を追加することですonReset()
ただし、GWTP ドキュメントを確認するonReset()と、プレゼンターに移動するたびにメソッドが呼び出されます。そのため、プレゼンターに複数回移動すると、 が複数回EventHandler追加され、複数回実行されます (プレゼンターを開いた回数に正比例します)。

はプレゼンターのライフ サイクルで 1 回だけ呼び出され、追加する必要がある場所であるため、メソッドからメソッドに移動しEventHandlerます。これに加えて、メソッドにラップして、が呼び出されたときに自動的に削除されるようにします。onReset()onBind()onBind()EventHandlersregisterHandler()onUnbind()

FirstApplicationPresenter.java :

@Override
protected void onBind() {
    super.onBind();
    getView().getLogoutBtn().setText("Logout "+username);
    registerHandler(getView().getLogoutBtn().addClickHandler(new ClickHandler() {
        @Override
            public void onClick(ClickEvent event) {
                Logout action = new Logout();
                dispatchAsync.execute(action, logoutCallback);
            }
    }));
}

@Override
protected void onReset() {
    super.onReset();
}            
于 2012-07-12T14:23:27.783 に答える