OperaMasks框架在每个生命周期阶段之前和之后触发的事件,称为阶段事件。这些事件由阶段监听器处理。我们可以指定阶段监听器监听所有视图的阶段事件,也可以只监听某个视图的阶段事件。在OperaMasks中,定义阶段监听器主要有两种方式
实现javax.faces.event包中的PhaseListener接口定义阶段监听器。这个接口提供三个方法
/** * 在此方法中返回这个监听器所监听的生命周期阶段,例如return PhaseId.RESTORE_VIEW; * 若返回PhaseId.ANY_PHASE将监听所有生命周期阶段事件。 */ public PhaseId getPhaseId(); /** * 实现此方法加入在生命周期阶段开始时的处理逻辑 */ public void beforePhase(PhaseEvent event); /** * 实现此方法加入在生命周期阶段结束时的处理逻辑 */ public void afterPhase(PhaseEvent event);
为使监听器生效,可在faces-config.xml文件中注册监听器或者为这个监听器类加上@PhaseListener注解,这种方法定义的阶段监听器可以监听所有视图的生命周期事件。
将LiteBean中的方法声明为生命周期阶段监听方法。在LiteBean中使用@BeforePhase和@AfterPhase注解可以直接定义生命周期阶段监听方法:
@AfterPhase
public void afterPhase(PhaseEvent event){
log = log + "\n" + event.getPhaseId().toString() + "阶段结束";
}
@BeforePhase
public void beforePhase(PhaseEvent event){
log = log + "\n" + event.getPhaseId().toString() + "阶段开始";
}
这种方式定义的阶段监听器单个视图生效。请注意,由于这两个注解需要IoVC绑定支持,而IoVC绑定动作发生在生命周期第一阶段(恢复视图阶段)中,因此使用这两个注解无法监听到这个阶段的生命周期阶段事件。
由于渲染响应阶段在首次请求与postback中都会执行,而且此阶段的BeforePhase事件是页面被渲染前对构件树进行修改的最后机会。因此 OperaMasks为这个阶段定义了专门的监听注解:使用@BeforeRender和@AfterRender注解的方法可以分别监听渲染响应阶段之前和之后广播的阶段事件。