我在我的 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 个弹出窗口。然后我注销系统并再次登录(导航到存在“搜索客户”按钮的同一页面。)并且代码执行了两次。同样等于我创建/导航到特定页面的次数,代码执行。每次我重新创建页面时,它实际上是否添加了事件处理程序代码而不删除最后一个?