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回実行されます。同様に、特定のページを作成/ナビゲートする回数に等しいコードが実行されます。ページを再作成するたびに最後のイベント ハンドラー コードを削除せずに、実際にイベント ハンドラー コードを追加していますか?