JSF把整个生命周期划分成了6个阶段,具体为:restore view(重载视图)阶段,apply request
value(应用请求值)阶段,process validation(合法性检查)阶段,update model
value(更新模型值)阶段,invork
application(事件处理)阶段,render(画面重画)阶段。并在不同的阶段完成不同的任务,这里不对具体的任务作详细描述了,以后,我们会
在其他文章中加以介绍。
怎么切入JSF的生命周期呢?JSF提供了很多方法:
1, 从Lifecycle切入。
Lifecycle就是JSF生命周期的控制中心,相当于人的心脏,它的重要性和位置可想而知。在Lifecycle里,主要负责调用上面提到的生命周期的6个阶段的处理。就是这么重要的控制中心,JSF也提供了切入方法以让我们完全替代它。
1)首先,需要在web.xml里定义以下内容,让JSF知道你要使用你自己的Lifecyle实现,而不是默认的Lifecycle实现。
<context-param>
<param-name>javax.faces.LIFECYCLE_ID</param-name>
<param-value>yourself.LifecyleImpl</param-value>
</context-param>
2)上面提到的yourself.LifecyleImpl便是你自己的Lifecyle实现,它必须从javax.faces.lifecycle.Lifecycle虚拟类继承并实现其中的虚拟方法。
因为JSF提供了很多其他方法来让你切入JSF控制,所以除非特别需要,不建议从Lifecyle的实现直接切入JSF控制。
2. 从PhaseListener切入。
PhaseListener,简单说来就是对上述6个阶段进行监听的切入点。我们可以通过以下步骤实现:
1)在JSF的配置文件如faces-config.xml里对phase-listener加以配置,告诉JSF我们需要监视它的生命周期。
<lifecycle>
<phase-listener>yourself.YourPhaseListener</phase-listener>
</lifecycle>
2)yourself.YourPhaseListener就是你自己的phase-listener实现。它必须实现javax.faces.event.PhaseListener接口。它提供了3个方法,让你完成你想要做的事情:
public void beforePhase(PhaseEvent phaseEvent):在每个阶段处理之前被调用
public void afterPhase(PhaseEvent phaseEvent):在每个阶段处理之后被调用
public PhaseId getPhaseId():告诉JSF你要监视哪个phase。可以指定一个,或全部阶段。
3, 从ActionListener切入。
当一个按钮被按下,或者命令联结被点击时,JSF会在 invork application阶段的broadcast
event时通过ActionListener调用事先绑定的事件处理方法。如果有用户自定义的ActionListener时,JSF将使用用户自定义
ActionListener来代替默认的ActionListener。
用户自定义ActionListener必须实现
javax.faces.event.ActionListener接口,并实现其接口方法:public void
processAction(ActionEvent actionEvent)。注意,在这个实现方法里,必须调用控件的事件处理方法(JSF
Backing Bean中的事件处理方法),并对其返回值做出画面迁移处理和其他你自己的处理等。
切入JSF的生命周期
最新推荐文章于 2022-01-16 07:53:53 发布