介绍JSF的事件类、监听器接口、事件源和事件队列,并说明在JSF中如何编写监听器、注册监听器以及产生和排队事件。
1 JSF事件类
JSF是Java Web应用的表示层框架。站在事件分类的角度,这句话有两层含义:
第一,JSF应用是Web应用,因此,JSF必然包含与HTTP请求处理有关的事件类。由于JSF将HTTP请求的处理过程划分为若干个阶段,并称之为请求处理生命周期,因此,在JSF中,这类与HTTP请求处理有关的事件被称为请求处理阶段事件,简称阶段事件。阶段事件对应的事件类是javax.faces.event.PhaseEvent。
第二,JSF是表示层框架,因此,JSF必然包含与构成表示层的UI组件有关的事件类,这类事件,总称为Faces事件,对应的事件类是javax.faces.event.FacesEvent。按照UI组件的不同功能,Faces事件进一步被划分为两类。一类由动作类UI组件触发,称为ActionEvent即动作事件,相应的事件类是javax.faces.event.ActionEvent;另一类由输入类UI组件触发,称为ValueChangeEvent,即值改变事件,相应的事件类是javax.faces.event.ValueChangeEvent。
上述所有事件类,均继承自Java的事件基类java.util.EventObject
事件基类EventObject ------>PhaseEvent/FacesEvent FacesEvent-->ActionEvent/ValueChangeEvent
可见,JSF共有四类事件,即:
阶段事件类 PhaseEvent
Faces事件类 FacesEvent<抽象类>
动作事件类 ActionEvent
值改变事件类 ValueChangeEvent
Faces事件类是一个抽象类,作为动作事件类和值改变事件类的基类,在实际应用中不可实例化,因此,需要关注的JSF事件类只有三种:
PhaseEvent,ActionEvent,ValueChangeEvent
对应监听器为:
PhaseListener,ActionListener,ValueChangeListener
监听器在JSF编程中占有重要地位,可以完成很多功能,例如:
检查并改变UI组件的值;
动态添加或删除UI组件;
调用业务逻辑方法;
在页面上显示消息;
人为触发某种事件;
重定向页面。