JavaServer Faces 生命周期

2024 年 8 月 29 日 | 5 分钟阅读

JavaServer Faces 应用框架自动管理简单应用的生命周期,也允许您手动管理。 JavaServer Faces 应用的生命周期从客户端发出页面 HTTP 请求开始,到服务器使用页面响应结束。

JSF 生命周期分为两个主要阶段
  1. 执行阶段
  2. 渲染阶段

1) 执行阶段

在执行阶段,当发出第一个请求时,构建或恢复应用视图。对于其他后续请求,会执行其他操作,如应用请求参数值,对组件值进行转换和验证,使用组件值更新托管 Bean,并调用应用逻辑。

执行阶段进一步细分为以下子阶段。

  • 恢复视图阶段
  • 应用请求值阶段
  • 处理验证阶段
  • 更新模型值阶段
  • 调用应用阶段
  • 渲染响应阶段

恢复视图阶段

当客户端请求 JavaServer Faces 页面时,JavaServer Faces 实现开始恢复视图阶段。 在此阶段,JSF 构建请求页面的视图,将事件处理程序和验证器连接到视图中的组件,并将视图保存在 FacesContext 实例中。

如果页面请求是回发,则与此页面对应的视图已存在于 FacesContext 实例中。在此阶段,JavaServer Faces 实现通过使用在客户端或服务器上保存的状态信息来恢复视图。

应用请求值阶段

在此阶段,在回发请求期间恢复组件树。组件树是表单元素的集合。树中的每个组件通过使用其 decode (processDecodes()) 方法从请求参数中提取其新值。之后,该值在每个组件上本地存储。

  • 如果任何 decode 方法或事件侦听器在当前的 FacesContext 实例上调用了 renderResponse 方法,则 JavaServer Faces 实现将跳到渲染响应阶段。
  • 如果在该阶段期间已排队任何事件,则 JavaServer Faces 实现会将事件广播给感兴趣的侦听器。
  • 如果应用需要重定向到不同的 Web 应用资源或生成不包含任何 JavaServer Faces 组件的响应,它可以调用 FacesContext.responseComplete() 方法。
  • 如果当前请求被标识为部分请求,则从 FacesContext 检索部分上下文,并应用部分处理方法。

处理验证阶段

在此阶段,JavaServer Faces 使用其 validate () 方法处理在组件上注册的所有验证器。它检查指定验证规则的组件属性,并将这些规则与为组件存储的本地值进行比较。JavaServer Faces 还为未将 immediate 属性设置为 true 的输入组件完成转换。

  • 如果任何验证方法或事件侦听器在当前的 FacesContext 上调用了 renderResponse 方法,则 JavaServer Faces 实现将跳到渲染响应阶段。
  • 如果应用需要重定向到不同的 Web 应用资源或生成不包含任何 JavaServer Faces 组件的响应,它可以调用 FacesContext.responseComplete 方法。
  • 如果在此阶段已排队任何事件,则 JavaServer Faces 实现将它们广播给感兴趣的侦听器。
  • 如果当前请求被标识为部分请求,则从 FacesContext 检索部分上下文,并应用部分处理方法。

更新模型值阶段

在确保数据有效后,它遍历组件树,并将相应的服务器端对象属性设置为组件的本地值。 JavaServer Faces 实现仅更新由输入组件的 value 属性指向的 Bean 属性。 如果本地数据无法转换为 Bean 属性指定的类型,则生命周期直接进入渲染响应阶段,以便重新渲染页面并显示错误。

  • 如果任何 updateModels 方法或任何侦听器在当前的 FacesContext 实例上调用了 renderResponse() 方法,则 JavaServer Faces 实现将跳到渲染响应阶段。
  • 如果应用需要重定向到不同的 Web 应用资源或生成不包含任何 JavaServer Faces 组件的响应,它可以调用 FacesContext.responseComplete() 方法。
  • 如果在此阶段已排队任何事件,则 JavaServer Faces 实现将它们广播给感兴趣的侦听器。
  • 如果当前请求被标识为部分请求,则从 FacesContext 检索部分上下文,并应用部分处理方法。

调用应用阶段

在此阶段,JSF 处理应用级别的事件,例如提交表单或链接到另一个页面。

现在,如果应用需要重定向到不同的 Web 应用资源或生成不包含任何 JSF 组件的响应,它可以调用 FacesContext.responseComplete() 方法。

之后,JavaServer Faces 实现将控制权转移到渲染响应阶段。

渲染响应阶段

这是 JSF 生命周期的最后阶段。 在此阶段,JSF 构建视图并将权限委托给适当的资源以渲染页面。

  • 如果这是初始请求,则页面上表示的组件将被添加到组件树中。
  • 如果这不是初始请求,则组件已添加到树中,无需再次添加。
  • 如果请求是回发并且在应用请求值阶段、处理验证阶段或更新模型值阶段期间遇到错误,则在此阶段再次渲染原始页面。
  • 如果页面包含 h:message 或 h:messages 标签,则页面上将显示任何排队的错误消息。
  • 渲染视图内容后,将保存响应的状态,以便后续请求可以访问它。 保存的状态可用于恢复视图阶段。

2) 渲染

在此阶段,请求的视图作为对客户端浏览器的响应呈现。 视图呈现是一个生成 HTML 或 XHTML 输出的过程。因此,用户可以在浏览器中看到它。

在呈现过程中会采取以下步骤。

  • 当客户端首次请求 index.xhtml 网页时,会编译应用。
  • 编译后执行应用,并为应用构建一个新的组件树,并将其放置在 FacesContext 中。
  • 使用与 EL 表达式表示的组件关联的组件和托管 Bean 属性填充组件树。
  • 基于组件树。构建一个新的视图。
  • 视图将作为响应呈现给请求客户端。
  • 组件树将自动销毁。
  • 在后续请求中,将重建组件树,并应用保存的状态。

下一主题JSF 托管 Bean