本文概述
- 1)执行阶段
- 2)渲染
JSF生命周期分为两个主要阶段:
- 执行阶段
- 渲染阶段
执行阶段进一步分为以下子阶段。
- 恢复查看阶段
- 应用请求值阶段
- 流程验证阶段
- 更新模型值阶段
- 调用申请阶段
- 渲染响应阶段
当客户端请求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标记, 则所有排队的错误消息都会显示在页面上。
- 呈现视图内容之后, 将保存响应状态, 以便后续请求可以访问它。保存的状态可用于“还原视图”阶段。
【JavaServer Faces生命周期】在渲染过程中采取以下步骤。
- 当客户端对index.xhtml网页发出初始请求时, 将编译应用程序。
- 应用程序在编译后执行, 并为该应用程序构建一个新的组件树并将其放置在FacesContext中。
- 用EL表达式表示的组件树中填充了组件和与之关联的托管bean属性。
- 基于组件树。新建一个视图。
- 该视图作为响应呈现给发出请求的客户端。
- 组件树将自动销毁。
- 根据后续请求, 将重新构建组件树, 并应用保存状态。
推荐阅读
- JSF托管Bean
- JSF JDBC连接
- JSF h:inputTextarea标记
- JSF h:inputText标签
- JSF h:inputSecret标记
- JSF h:inputHidden标记
- JSF h:inputFile标记
- HTML5友好标记
- JSF 标记