JavaServer Faces生命周期

本文概述

  • 1)执行阶段
  • 2)渲染
JavaServer Faces应用程序框架自动管理简单应用程序的生命周期阶段, 还允许你手动进行管理。 JavaServer Faces应用程序的生命周期从客户端向页面发出HTTP请求时开始, 到服务器响应页面时结束。
JSF生命周期分为两个主要阶段:
  1. 执行阶段
  2. 渲染阶段
1)执行阶段在执行阶段, 当发出第一个请求时, 将构建或还原应用程序视图。对于其他后续请求, 将执行其他操作, 例如应用请求参数值, 对组件值执行转换和验证, 使用组件值更新托管Bean并调用应用程序逻辑。
执行阶段进一步分为以下子阶段。
  • 恢复查看阶段
  • 应用请求值阶段
  • 流程验证阶段
  • 更新模型值阶段
  • 调用申请阶段
  • 渲染响应阶段
恢复查看阶段
当客户端请求JavaServer Faces页面时, JavaServer Faces实现将开始还原视图阶段。在此阶段, JSF构建请求页面的视图, 将事件处理程序和验证器连接到视图中的组件, 并将该视图保存在FacesContext实例中。
如果对该页面的请求是回发, 则FacesContext实例中已经存在与该页面对应的视图。在此阶段, JavaServer Faces实现通过使用保存在客户端或服务器上的状态信息来还原视图。
应用请求值阶段
在此阶段, 在回发请求期间将还原组件树。组件树是表单元素的集合, 树中的每个组件都通过使用自己的解码(processDecodes())方法从请求参数中提取其新值。之后, 该值将本地存储在每个组件上。
  • 如果任何解码方法或事件侦听器已在当前FacesContext实例上调用renderResponse方法, 则JavaServer Faces实现将跳至“渲染响应”阶段。
  • 如果在此阶段已将任何事件排队, 则JavaServer Faces实现会将事件广播给感兴趣的侦听器。
  • 如果应用程序需要重定向到其他Web应用程序资源或生成不包含任何JavaServer Faces组件的响应, 则可以调用FacesContext.responseComplete()方法。
  • 如果当前请求被标识为部分请求, 则从FacesContext检索部分上下文, 并应用部分处理方法。
流程验证阶段
在此阶段, JavaServer Faces使用其validate()方法处理在组件上注册的所有验证器。它检查指定验证规则的组件属性, 并将这些规则与为组件存储的本地值进行比较。 JavaServer Faces还可以完成未将即时属性设置为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的过程。因此, 用户可以在浏览器中看到它。
【JavaServer Faces生命周期】在渲染过程中采取以下步骤。
  • 当客户端对index.xhtml网页发出初始请求时, 将编译应用程序。
  • 应用程序在编译后执行, 并为该应用程序构建一个新的组件树并将其放置在FacesContext中。
  • 用EL表达式表示的组件树中填充了组件和与之关联的托管bean属性。
  • 基于组件树。新建一个视图。
  • 该视图作为响应呈现给发出请求的客户端。
  • 组件树将自动销毁。
  • 根据后续请求, 将重新构建组件树, 并应用保存状态。

    推荐阅读