JSF - 生命周期
JSF 应用程序生命周期包含六个阶段,如下所示 −
- 恢复视图阶段
- 应用请求值阶段;处理事件
- 处理验证阶段;处理事件
- 更新模型值阶段;处理事件
- 调用应用程序阶段;处理事件
- 呈现响应阶段
![JSF 生命周期](/jsf/images/jsf_life_cycle.jpg)
六个阶段显示了 JSF 处理表单的顺序。该列表按可能的执行顺序显示了各个阶段,每个阶段都有事件处理。
阶段 1:恢复视图
单击链接或按钮并收到请求后,JSF 便开始恢复视图阶段。
在此阶段,JSF 构建视图,将事件处理程序和验证器连接到 UI 组件,并将视图保存在 FacesContext 实例中。FacesContext 实例现在将包含处理请求所需的所有信息。
阶段 2:应用请求值
创建/恢复组件树后,组件树中的每个组件都使用解码方法从请求参数中提取其新值。组件存储此值。如果转换失败,则会生成错误消息并在 FacesContext 上排队。此消息将在渲染响应阶段与任何验证错误一起显示。
如果任何解码方法事件侦听器在当前 FacesContext 实例上调用 renderResponse,则 JSF 将转到渲染响应阶段。
阶段 3:处理验证
在此阶段,JSF 处理组件树上注册的所有验证器。它检查组件属性规则以进行验证,并将这些规则与为组件存储的本地值进行比较。
如果本地值无效,JSF 会向 FacesContext 实例添加一条错误消息,生命周期将进入呈现响应阶段,并再次显示带有错误消息的同一页面。
阶段 4:更新模型值
在 JSF 检查数据有效后,它将遍历组件树并将相应的服务器端对象属性设置为组件的本地值。 JSF 将更新与输入组件的 value 属性相对应的 bean 属性。
如果任何 updateModels 方法在当前 FacesContext 实例上调用 renderResponse,JSF 将进入呈现响应阶段。
阶段 5:调用应用程序
在此阶段,JSF 处理任何应用程序级事件,例如提交表单/链接到另一个页面。
阶段 6:呈现响应
在此阶段,如果应用程序使用 JSP 页面,JSF 会要求容器/应用程序服务器呈现页面。对于初始请求,页面上表示的组件将在 JSP 容器执行页面时添加到组件树中。如果这不是初始请求,则组件树已经构建,因此无需再次添加组件。在任何一种情况下,组件都会在 JSP 容器/应用服务器遍历页面中的标签时自行呈现。
在呈现视图内容后,将保存响应状态,以便后续请求可以访问它,并且可用于恢复视图阶段。