每个呈示了 JavaServer Pages(JSP)页的 JavaServer Faces 请求都涉及 JavaServer Faces 组件树(又称为视图)并贯穿由一些阶段构成的请求处理生命周期。请求处理生命周期的标准阶段以构建恢复视图开始,然后应用请求值、处理验证、更新模型值及调用应用程序。

- 构建复原视图
- JavaServer Faces 组件树用来构建和维护页面的状态和事件。对于每个会话,将会构建一次树,并且当用户返回到该页时复用该树。在此阶段的末尾,当前请求的 FacesContext 实例的根属性反映由先前的“Faces 响应”生成的视图的已保存配置(如果有的话)。
- 应用请求值
- 请求处理生命周期这一阶段的目的是使每个组件都有机会使用当前请求中包括的信息更新各组件的当前值,例如,参数、标题和 cookie。
- 处理验证
- 作为创建此请求的视图的一部分,可以为每个组件注册零个或多个验证器实例。另外,组件类自身也可以在它们的 validate() 方法中实现验证逻辑。在此阶段的末尾,会完成所有配置的验证。
失败的验证通过调用当前请求的 FacesContext 实例的 addMessage() 方法而使消息入队,并且相应组件上的有效属性被设置为 false。如果被调用的任何 validate() 方法都调用了当前请求的
FacesContext 实例上的 responseComplete(),则当前请求的生命周期处理必须立即终止。如果被调用的任何 validate() 方法都调用了当前请求的 FacesContext 实例上的 renderResponse(),则控制权必须转移给请求处理生命周期的“呈示响应”阶段。对于处理了已排队事件的事件侦听器,情况也是一样。如果没有发生以上这些情况,则控制权将继续保留至下一阶段以更新模型值。
- 更新模型值
- 如果达到了请求处理生命周期的这一阶段,就意味着入局请求根据所执行的验证在语法和语义上都是有效的,且组件树中每一组件的本地值都已被更新,并且现在更新应用程序的模型数据以准备执行已排队的任何应用程序事件是适当的。
- 调用应用程序
- 如构建恢复视图时所述,如果当前请求的视图是根据先前请求保存的状态信息重新构造的,则 JavaServer Faces 实现就能够确保通过在此 Web 应用程序的“应用程序”对象上调用 getActionListener 而返回的 ActionListener 将根据 restoreState() 方法将向组件树中的所有 UICommand 组件注册。
- 呈示响应
- 此阶段同时完成两项任务:使响应呈示给客户机,以及使响应的状态得到保存以供后续请求处理之用。在一个阶段中同时处理这两项任务的原因是在 JSP 应用程序中呈示响应的行为会导致在呈示页面时构建视图。因此,要在视图的状态被呈示给客户机之后才能保存该状态。
- 事件处理
- 在请求处理生命周期的几个阶段当中,可以对事件进行排队,例如,通过在源 UIComponent 实例上调用 queueEvent() 方法或在 FacesEvent 实例上调用 queue() 方法来对事件进行排队。这些排队事件现在必须被广播至有关事件侦听器。该广播操作是作为在当前组件树根的 UIViewRoot 实例上调用适当的生命周期管理方法(processDecodes()、processValidators()、processUpdates() 或 processApplication())的一个副作用来执行的。对于每个排队事件,将调用源
UIComponent 的 broadcast() 方法来将事件广播至所有事件侦听器,这些侦听器已就此源组件对指定类型的事件进行了注册。将返回一个“Boolean”标志,指示是否此事件已经得到完全处理以及是否 JavaServer Faces 实现可以从事件队列中除去该事件。
事件侦听器也有可能导致在请求处理生命周期的当前阶段中使其他事件排队等候处理。这些事件必须按排队的顺序广播:在广播了最初排队的所有事件之后,但在生命周期管理方法返回之前。
请参阅 UIComponent.broadcast() 方法的 API 参考以了解详细的功能需求。