Monday, August 14, 2006

JSF中的状态事件

当JSF接收到一个请求的时候,会执行6个步骤,称之为请求处理生命周期(RPL)。在这个过程中JSF会重建请求视图,通过数据输入组件把请求参数翻译成组件值,更新支持Bean或者数据模型,提交事件监听器,最后将响应返回给用户。状态事件在上面的每一个步骤的前后都会产生(我们将在随后陆续介绍RPL)。
状态事件由JSF框架本身产生而不是由组件触发,必须实现一个Java接口来注册这个监听器。这一实现过程通常由JSF内部完成,当然开发人员也可以根据自己的需要实现相应的接口。例如,通过它你可以在页面显示之前初始化一个支持Bean(SUN的Java Studio Creater允许自动控制支持Bean操作状态事件)。下面这个例子演示了在页面显示之前注册状态监听器的方法:
lifecycle.addPhaseListener(
new PhaseListener()
{
public void beforePhase(PhaseEvent event)
{
priceQuote = QuoteService.getLatestQuote(currentQuoteId);
}
public void afterPhase(PhaseEvent event)
{
}
public PhaseId getPhaseId()
{
return PhaseId.RENDER_RESPONSE;
}
});
在上面的例子中我们给先前定义的lifecycle对象增加了一个PhaseListener状态监听器。PhaseId(就是不同的方法,如before,after)告诉lifecycle什么时候触发这些事件。在这个例子中,会在页面显示之前触发一个事件。beforePhase在页面显示之前会被触发。afterPhase在页面显示之后触发。在beforePhase方法中我们用来自QuoteService中最后的值更新了priceQuote属性。因为在页面显示之前我们就更新了priceQuote的值所以在页面显示后这个值可以被组件显示。
如你所见,在JSF中你无需关注底层协议,只要处理相应的事件和监听器就可以了。当然这并不意味着,你不必理解底层协议的工作,这样作的目的是为了每天的开发工作变得简单(如果你还是喜欢从总体上进行控制,别担心,如果需要你仍然可以使用 Servlet API)。因为事件和监听器是JSF开发的基础,所以你在后续的讲解中会不断的看到各种有关的例子,这里是对事件和监听器一个概要的介绍。

No comments: