study of 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属性填充组件树。

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

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

  组件树被自动销毁。

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

转载于:https://www.cnblogs.com/jlp6057/p/9385077.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从开源软件开发中体会到的心得

Mitchell Hashimoto 是一名开源软件工程师。由他托管到 GitHub 上的 开源项目 Vagrant,是一个用于创建和部署虚拟化开发环境的工具。近日,Mitchell撰文讲述了在开发 Vagrant 的过程中学到的有关开源软件开发的一些心得。 以下为原文文章: 把 …

学成在线--25.课程图片管理(图片查询)

文章目录一. 需求分析二. API三. 服务端开发1. Dao2. Service3. Controller四. 前端开发1. API方法2. 页面一. 需求分析 课程图片上传成功,再次进入课程上传页面应该显示出来已上传的图片。 二. API 在课程管理服务定义查询方法 文件位置:xcEduServic…

redux源码解读

背景 因为就得去实习了。所以打算开始补补坑。比如自己阅读源码的计划。所以今天来聊聊redux的源码。后续会有redux-thunk和react-redux的源码阅读。搞定这些的话,就开始阅读一个node的库的源码了,比如eventproxy和anywhere。 开始 总览, redux的文件结构…

sql语句update中多个case/when的写法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 又如: update xxxx_xxxx set xxx_typeCASE WHEN xxx_type 0 THENYXLX-0WHEN xxx_type 1 THENYXLX-1WHEN xxx_type 2 THE…

Redis-ha(sentinel)搭建

服务器描述:本次搭建是用来测试,所以是在一台服务器上搭建三个redis服务(一主两从) 服务角色 端口 Redis.conf名称 sentinel配置文件名称 sentinel端口 redis日志路径 sentinel路劲 主(master) 6379 redis.conf sentine…

学成在线--26.课程图片管理(图片删除)

文章目录一. 需求分析二. API三. 服务端开发1. Dao2. Service3. Controller四. 前端开发1. API方法2. 页面1.before-remove钩子方法2.handleRemove钩子方法一. 需求分析 课程图片上传成功后,可以重新上传,方法是先删除现有图片再上传新图片;…

警惕开源代码库中的安全隐患

最近的一项研究发现, 在调查的31个流行库(框架)的1261个版本中,超过三分之一存在已知的安全漏洞,大约四分之一的下载文件已经被污染。 该项研究由Aspect Security和Sonatype发起。Aspect Security是一家评估软件安全漏…

jsp注释

jsp注释 <%--注释内容--%> html注释 <!--注释内容-->

线程间的协作(3)——管道输入/输出流

2019独角兽企业重金招聘Python工程师标准>>> 1.管道输入/输出流类 分为两类&#xff0c;字节流管道类&#xff08;PipedInputStream/PipedOutputStream&#xff09;和字符流管道类&#xff08;PipedReader/ PipedWriter&#xff09;。这两个IO流实现了可以在不同的任…

windows简易版本 Redis 使用 demo样例(ssm框架下)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 在网上下载 windows 版本 的Redis 。下载了直接解压出来 &#xff1a; 2. 双击 redis-server.exe 启动服务&#xff08;如下图&#…

Redhat7.3安装配置Telnet详细教程

请参考&#xff1a;https://blog.csdn.net/weixin_39934520/article/details/84835949 谢谢楼主分享&#xff01;

程序员的半衰期只有15年?

曾在Google工作负责过技术工作的科技编辑 Matt Heusser总结了他在Google的生活经历&#xff0c;得出结论&#xff1a; 作为程序员&#xff0c;你只有15年时间。Matt 写道当我在Google工作时&#xff0c;发现Google大部分人都是20出头的年轻人&#xff0c;他们经历的很多事情都是…

EasyNVR、EasyDSS二次开发之:RTMP、HLS流在web页面进行无插件播放示例Demo代码

不管是基于EasyNVR还是EasyDSS&#xff0c;都是支持无插件直播&#xff0c;这也是未来视频直播的一个趋势。对于传统的浏览器插件播放谁用谁知道&#xff1b; 以上是软件自带播放展示 背景需求 对于EasyNVR和EasyDSS的使用方式大概分为两大类&#xff0c;一类是直接将软件作为视…

jsp中%@ % 与% % 与%! %

<% %> 有个符号的&#xff0c;叫做指令用来提供整个JSP 网页相关的信息&#xff0c;并且用来设定JSP网页的相关属性&#xff0c; 例如&#xff1a;网页的编码方式、语法、信息等。<% %>这个叫做小脚本&#xff0c;是写java代码的<%! %>这个是jsp中脚本声明&a…

Hadoop的学习路线图

目录&#xff1a;.1.Hadoop家族产品2.Hadoop家族学习路线图 Hadoop家族产品截止到2013年&#xff0c;根据cloudera的统计&#xff0c;Hadoop家族产品已经达到20个&#xff01;接下来&#xff0c;我把这20个产品&#xff0c;分成了2类。第一类&#xff0c;是我已经掌握的第二…

new TypeToken<List>>(){}.getType() 是什么意思

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 项目中代码&#xff1a; List<AppVersion> redisList new Gson().fromJson(json, new TypeToken<List<AppVersion>…

11--移除重复节点

编写代码&#xff0c;移除未排序链表中的重复节点。保留最开始出现的节点。 示例1: 输入&#xff1a;[1, 2, 3, 3, 2, 1] 输出&#xff1a;[1, 2, 3] 示例2: 输入&#xff1a;[1, 1, 1, 1, 2] 输出&#xff1a;[1, 2]

信息图:程序员/开发人员实际在用哪些工具

BestVendor.com的工作人员在全球范围内采访了500名重要开发人员&#xff0c;在调查询问他们实际使用的工具后&#xff0c;制作了一张信息图&#xff0c;如下。 这张信息图覆盖10个方面的工具&#xff1a;Bug 追踪、数据库、开发框架、集成开发环境&#xff08;IDE&#xff09;、…

class特性

每个HTML元素都可以附带一个class特性。有时候&#xff0c;你希望有一种方法可以指定多个元素并将这些元素和页面上的其他元素区分出来&#xff0c;而不是单独指定文档中的某个元素。 <!DOCTYPE html> <!-- To change this license header, choose License Headers in…