在 即时事
件 中我们提到,JSF的请求执行到回应,完整的过程会经过六个阶段:
依客户端传来的session数据或伺服端上的session数据,回复JSF画面组件。
JSF画面组件各自获得请求中的值属于自己的值,包括旧的值与新的值。
转换为对象并进行验证。
更新Bean或相关的模型值。
执行应用程序相关逻辑。
对先前的请求处理完之后,产生画面以回应客户端执行结果。
在每个阶段的前后会引发javax.faces.event.PhaseEvent,如果您想尝试在每个阶段的前后捕捉这个事 件,以进行一些处理,则可以实现javax.faces.event.PhaseListener,并向 javax.faces.lifecycle.Lifecycle登记这个Listener,以有适当的时候通知事件的发生。 PhaseListener有三个必须实现的方法getPhaseId()、beforePhase()与afterPhase(),其中 getPhaseId()传回一个PhaseId对象,代表Listener想要被通知的时机,可以设定的时机有:
其中PhaseId.ANY_PHASE指的是任何的阶段转换时,就进行通知;您可以在beforePhase()与afterPhase()中撰写阶段 前后撰写分别想要处理的动作,例如下面这个简单的类会列出每个阶段的名称:
package onlyfun.caterpillar; 撰写好PhaseListener后,我们可以在faces-config.xml中向Lifecycle进行注册:
<?xml version="1.0"?> 您可以使用这个简单的类,看看在请求任一个JSF画面时所显示的内容,藉此了解JSF每个阶段的流程变化。 |