我在我的GXT項目中實現了MVP模式。系統將客戶註冊爲其功能的一部分。系統用戶也可以搜索提供該ID的註冊用戶。GXT自定義事件處理程序代碼執行多次
我已將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彈出。然後,我退出系統並再次登錄(導航到「搜索客戶」按鈕所在的同一頁面),並且代碼被執行兩次。同樣等於我創建/導航到特定頁面的次數,代碼將執行。它是否實際上添加事件處理程序代碼而不刪除最後一次我重新創建頁面?