Study of the JavaServer Faces Lifecycle

Posted qiangzai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Study of the JavaServer Faces Lifecycle相关的知识,希望对你有一定的参考价值。

JavaServer Faces应用程序的生命周期在客户端为页面发出HTTP请求时开始,并在服务器响应该页面并转换为HTML时结束。

  通常将JSF的生命周期分为两个阶段:

    #执行阶段

    #渲染阶段

1.执行阶段

    JavaServer Faces应用程序生命周期执行阶段包含以下子阶段: 

    恢复视图:在内存中恢复或创建代表客户端用户界面信息的服务器端组件树(视图)。

    应用请求值:用来自客户端的最新数据更新这些服务器端组件。

    处理验证:对新数据执行验证和数据类型转换。

    更新模型值:用新数据更新服务器端模型对象。

    调用应用程序:调用满足请求所需要的应用程序逻辑,然后如果有需要,再导航到新页面。

    渲染响应:把响应渲染给请求客户端。

  JSF 请求—响应生命周期的步骤:

    技术分享图片

1.1恢复视图阶段

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

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

1.2应用请求值阶段

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

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

1.3流程验证阶段

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

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

1.4更新模型值阶段

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

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

1.5调用应用阶段

  在此阶段,JSF处理应用程序级事件,例如提交表单或链接到另一个页面。 
现在,如果应用程序需要重定向到其他Web应用程序资源或生成不包含任何JSF组件的响应,则可以调用FacesContext.responseComplete()方法。

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

1.6渲染响应阶段

  这是JSF生命周期的最后阶段。 在此阶段,JSF将构建视图并将权限委托给相应的资源来呈现页面。

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

2.渲染阶段

在此阶段,请求的视图作为对客户端浏览器的响应。 视图渲染是以html或XHTML生成输出的过程。 所以,用户可以在浏览器看到它。

在渲染过程中采取以下步骤。

  当客户端对index.xhtml网页进行初始请求时,编译应用程序。

  应用程序在编译后执行,并为应用程序构建一个新的组件树,并放置在FacesContext中。

  使用由EL表达式表示的组件和与其关联受托管bean属性填充组件树。

  基于组件树。 建立了新的视图。

  该视图作为响应呈现给请求客户端。

  组件树被自动销毁。

  在后续请求中,重新构建组件树,并应用已保存的状态。

 

 















以上是关于Study of the JavaServer Faces Lifecycle的主要内容,如果未能解决你的问题,请参考以下文章

定向运动员识图过程中视觉搜索特征研究 Study on Visual Search Characteristics of Orienteers in the Process of Map Readin

A Web Module That Uses JavaServer Faces Technology: The hello1 Example

A Web Module That Uses JavaServer Faces Technology: The hello1 Example

Seeking Multiple Solutions of Combinatorial optimization Problems: A Proof of Principle Study 学习笔记

Seeking Multiple Solutions of Combinatorial optimization Problems: A Proof of Principle Study 学习笔记

F - The Circumference of the Circle