GXT中的Listener采用观察者模式
因此在顶层就有一个接口com.extjs.gxt.ui.client.event.Observable,代表一个观察者
展示一下部分代码:
public interface Observable {
public void addListener(EventType eventType, Listener<? extends BaseEvent> listener);
public boolean fireEvent(EventType eventType, BaseEvent be);
public List<Listener<? extends BaseEvent>> getListeners(EventType eventType);
public boolean hasListeners();
public boolean hasListeners(EventType eventType);
public void removeListener(EventType eventType, Listener<? extends BaseEvent> listener);
}
BaseObservable 类对这个接口进行了实现
我们截取部分重要的代码来分析一下:
public class BaseObservable implements Observable {
//是否开启事件触发,如果为false,则不处理所有的触发事件
private boolean firesEvents = true;
//此对象的所有监听器
private Map<String, List<Listener<BaseEvent>>> listeners;
//是否在事件触发状态
private boolean activeEvent;
//触发事件 特别注意此方法返回类型!
public boolean fireEvent(EventType eventType, BaseEvent be) {
if (firesEvents && listeners != null) {
activeEvent = true;
be.setType(eventType);
List<Listener<BaseEvent>> list = listeners.get(getKey(eventType));
if (list != null) {
List<Listener<BaseEvent>> copy = new ArrayList<Listener<BaseEvent>>(list);
for (Listener<BaseEvent> l : copy) {
callListener(l, be);//① 此处可能会取消事件
}
}
activeEvent = false;
return !be.isCancelled();//② 返回类型表示是否需要取消事件
}
return true;
}
}
fireEvent方法用来触发事件,判断自身的listeners是否有在监听eventType事件,如果有,则让该listener处理此事件.
在处理之前设置activeEvent=true,表示正在处理,处理结束后设置activeEvent=false,表示处理结束
当处理结束时返回的是:!be.isCancelled()
表示此事件是否需要取消。
为什么会有这个设计呢?
因为当listener①在处理这个事件时,它想要取消这个事件,中断后续的处理。那么他可以设置be.setCancelled(true);
此时返回的② !be.isCancelled() 为false
外部调用fireEvent方法的程序得到了一个false的返回值,就知道事件被取消了,不会继续调用下一步的处理。
分享到:
相关推荐
在 `web.xml` 配置文件中,我们需要通过 `<listener>` 元素来注册我们的监听器,指定监听器类的全限定名。在这个例子中,`<listener-class>` 是 `com.anllin.listener.MyServletContextListener`。 2. **...
Listener监听器1 Listener监听器是一种特殊的类,用于监听 web 应用程序中的 ServletContext、HttpSession、ServletRequest 等域对象的创建和销毁事件,以及监听这些域对象中的属性发生修改的事件。Listener监听器...
`ServletListenerRegistrationBean`是Spring框架提供的一个工具类,用于注册监听器。 ```java @SpringBootApplication public class App2 { public static void main(String[] args) { SpringApplication.run...
JavaWeb开发技术中的Listener监听器是Java企业级应用开发中的重要组成部分,主要用于监听应用程序中发生的特定事件,并在事件发生时执行相应的处理逻辑。监听器在JavaWeb开发中扮演着关键角色,它们允许开发者对Web...
### STRUTS:Listener监听器详解 #### 一、引言 在Java Web开发中,监听器(Listener)是十分重要的组成部分,它们主要用于监听特定事件的发生,并执行相应的处理逻辑。Struts框架作为早期流行的MVC架构之一,充分...
`listener.ora`文件是Oracle监听器的配置文件,它定义了监听器的名称、监听的端口以及服务名等信息。当客户端尝试连接到Oracle数据库时,监听器会接收请求,并根据配置转发到相应的数据库实例。以下是一些关于`...
标题"listener监听器demo"和描述"listener监听器小例子"暗示我们将探讨的是一个关于`Listener`的示例代码。 首先,让我们从Java GUI编程的角度来看`Listener`。在Swing或AWT中,我们经常使用各种类型的`Listener`,...
2. Start listener:启动指定的监听器。 3. Status listener:显示指定监听器的状态。 4. Stop listener:关闭指定的监听器。 5. Trace:打开监听器的跟踪特性。 6. Version:显示 Oracle Net 软件与协议适配器...
监听器Listener解析与实例监听器-就是一个实现待定接口的普通Java程序,此程序专门用于监听另外一个类的方法调用。 这是使用观察者模式的。什么是观察者模式: 定义对象间一对多的依赖关系,当一个对象的状态发生...
Oracle RAC 监听器配置文件 listener.ora 详解 Oracle RAC 监听器配置文件 listener.ora 是一个核心配置文件,用于配置 Oracle Net Listener 的参数。本文将详细介绍 listener.ora 文件的配置参数、协议地址参数、...
该组件作为一个监听器运行,持续监控TFS中的变化,如工作项的创建、更新或删除,以及源代码的提交等。一旦检测到这些事件,它就会通过API接口将这些信息同步到VersionOne系统中。这种实时同步确保了在多团队协作环境...
java_listener监听器教程及实例.pdf
JAVALISTENER监听器教程及实例借鉴.pdf
Oracle 监听器 Listener 资料 Oracle 监听器 Listener 是一个重要的数据库服务器组件,在整个 Oracle 体系结构中,扮演着重要的作用。它负责管理 Oracle 数据库和客户端之间的通讯,它在一个特定的网卡端口(默认是...
"Spring Boot的listener(监听器)简单使用实例详解" 在Spring Boot中,listener(监听器)是一种非常重要的组件,它可以帮助我们在应用程序启动和停止时执行一些特定的任务。今天,我们将详细介绍Spring Boot的...
2. 事件监听器的实现应该遵循单一职责原则,避免将多个事件处理方法放在同一个事件监听器中。 3. 事件源应该提供注册事件监听器的方法,以便事件监听器可以被正确地注册。 Java监听器是Java编程中的一种重要设计...
在Java Web开发中,监听器(Listener)和过滤器(Filter)是两种非常重要的组件,它们分别承担着不同的职责。监听器主要用于监听应用程序中的特定事件,而过滤器则用于在请求处理之前和之后对请求和响应进行拦截,...
Oracle 数据库监听器(LISTENER)和本地服务名(Tnsname)配置 本文主要介绍 Oracle 数据库监听器(LISTENER)和本地服务名(Tnsname)的配置,旨在帮助读者了解 Oracle 网络连接配置的主要组件和配置方法。 一、监听器...