0

GXT プロジェクトに MVP パターンを実装しました。システムは、その機能の一部として顧客を登録します。また、システムユーザーは、ID を提供する登録済みユーザーを検索できます。

「顧客検索」ボタンに OnClick イベントを追加しました。

/* On click search button */
        view.getBtnSearch().addListener(Events.OnClick, new Listener<BaseEvent>() {
            @Override
            public void handleEvent(BaseEvent be) {
                eventBus.fireEvent(new CustomerRegistrationTabSelectionEvent(0, false));
                eventBus.fireEvent(new CustomerFetchEvent(view.getValueCustSearchParameter(), view.getValueCustSearchValue(), true));
            }
        });

CustomerRegistrationTabSelectionEvent は関連するタブを選択し、他のタブを有効にします。それだけです。

カスタム イベント CustomerFetchEvent のハンドラーを次に示します。

eventBus.addHandler(CustomerFetchEvent.TYPE, new CustomerFetchEventHandler() {
            @Override
            public void fetchCustomer(CustomerFetchEvent event) {
                searchCustomer(event.getParameter(), event.getParameterValue(), event.isOpenFirstTab()); 
            }
        });

問題は、検索カスタマー メソッドが複数回実行され、無効な検索がある場合、エラー メッセージ ダイアログに複数のポップアップが表示されることです。searchCustomer メソッド内で、顧客データを取得するか、検索が無効な場合はポップアップ エラー メッセージを表示するサービスを呼び出します。

GXT 2.2.5 と JRE 1.6 を使用しています。

コードが複数回実行される理由を見つけるのを手伝ってくれる人はいますか?

後で追加: アプリケーションを初めて実行すると、コードは 1 回だけ実行されるため、ポップアップは 1 回だけです。次に、システムからログアウトして再度ログインし(「顧客検索」ボタンが存在する同じページに移動します)、コードが2回実行されます。同様に、特定のページを作成/ナビゲートする回数に等しいコードが実行されます。ページを再作成するたびに最後のイベント ハンドラー コードを削除せずに、実際にイベント ハンドラー コードを追加していますか?

4

2 に答える 2

0

Y A。私はそれを修正しました!これ がGWTで必要なプレゼンターのバインドを解除するソリューションです

Uはここでもっと読むことができます。http://draconianoverlord.com/2010/11/23/gwt-handlers.html

実際に起こったことは、イベントを受信するためにHandlerManagerに登録したプレゼンターオブジェクトがガベージコレクションされなかったことです。プレゼンターへの参照を削除しても、HandlerManagerはそれらのオブジェクトへの参照を保持しているためです。そのため、同じクラスの古いプレゼンターの上に新しいプレゼンターを作成し続けるたびに。したがって、イベントは同じクラスの複数のオブジェクトによってリッスンされます。したがって、HandlerManagerに登録されているハンドラーを削除して、未使用のプレゼンターがガベージコレクションされていることを確認する必要があります。

于 2012-08-16T08:30:48.447 に答える
0

はい、「addHandler」はハンドラーを複数回追加しているようですが、以前のコンテキストを保存しています。コードは、初期化フェーズで一度だけハンドラーを追加する必要があります。「getHandlerCount」メソッドでハンドラーの数を確認できます。

于 2012-08-12T20:29:27.480 に答える