JSF笔记 – JSF运行流程和生命周期介绍
本文由发表于6年前 | J2EE | 暂无评论 |  被围观 8,926 views+
1、JSF将用户请求分成两种:2、JSF的6个生命周期:2.1、恢复视图阶段:2.2、应用请求值阶段:2.3、处理输入校验阶段:2.4、更新模型的值阶段:2.5、调用应用阶段:2.6、生成响应阶段:

JSF是一个Web应用,也会遵循请求/相应的架构,与JSP的生命周期完全相似:客户端发送一个HTTP请求,服务器端对请求进行处理之后,向客户端送回HTTP响应,整个JSP生命周期完成。

JSF将请求/响应的生命周期细化为更多阶段,从而支持更加复杂的UI组件模型。

1、JSF将用户请求分成两种:
1、 初始请求:当用户直接向某个页面发送请求时,请求没有附加任何的参数信息。
2、 提交表单:单击表单的提交按钮、提交超链接时,就会发生提交表单请求。
2、JSF的6个生命周期:

2.1、恢复视图阶段:

当客户端向某个JSF页面发送请求时,例如单击了某个超链接或者按钮时,JSF就开始恢复视图阶段。

在这个阶段,JSF将会为该页面创建对应的视图,并将事件监听器、输入校验器等连接到页面所包含的UI组件上,使用FacesContext实例来保存视图对象。此时,应用相关的所有组件,包括UI,事件处理器,转换器和输入校验器都可以访问到该FacesContext实例。

如果是初始请求:JSF将在该阶段创建一个新的视图对象,并将生命周期阶段直接推进到生产响应阶段。

如果是提交表单:则对应该页面的视图已经存在,JSF将会采用客户端或服务器端的信息来恢复视图。

2.2、应用请求值阶段:

当视图恢复完成后,每个组件都会调用它的decode方法从请求参数中提取新的参数值,并保存在本地组件上(保存之前需要先进行类型转换,如果值转换失败,JSF将会使用FacesContext来保存与组件相关的错误消息,并将消息放入消息对了中,这些消息将会等到输出响应阶段几种处理)。

如果任何组件的decode方法或者事件监听器调用了FacesContext的renderResponse方法,那么JSF将会直接推进到生成响应阶段。

如果页面的某个组件设置了immediate="true",这个阶段还会处理这些组件相关的验证、转换和事件等。

在这个阶段,应用可以重定向到其他资源,或者生成一个不包含Java Server Faces组件的响应,如果需要实现这种处理,开发者必须调用Facescontext。responseComplete来跳过生成响应阶段。

这个阶段结束后,所有组件都被设置成了他们的新值,所有消息和事件都被放入队列。

2.3、处理输入校验阶段:

处理UI组件注册的输入校验器,JSF会用各UI组件上的本地值和对应输入校验规则进行比较,如果本地值无效,JSF就会把对应的错误消息添加到FacesContext实例中,而JSF的生命周期也将直接推进到生成响应阶段,显示页面可以通过<h:message>或者<h:messages>来显示输入校验的错误信息。

在这个阶段中,任何validator方法和事件监听器调用了当前的FacesContext实例的renderResponse方法,那么应用的生命周期将会直接推进到生成响应阶段。

如果需要在该阶段重定向到其他资源,或者生成一个不包含Java Server Faces组件的响应,开发者可以调用FacesContext.responseComplete来跳转到生成响应阶段。

2.4、更新模型的值阶段:

通过了输入校验之后,使用UI组件的本地值更新与之绑定的托管Bean(将用户输入的数据传送给服务器端的托管Bean),JSF只会更新绑定到输入组件的托管Bean。

如果无法更新,则会生成错误信息,生命周期直接推进到生成响应阶段,可以采用<h:message>或<h:messages>来显示错误信息。

在这个阶段中,如果任何updateModels方法或事件监听器调用了当前FacesContext实例的renderResponse方法,生命周期将会直接推进到生成响应阶段。

如果需要在该阶段重定向到其他资源,或者生成一个不包含Java Server Faces组件的响应,开发者可以调用FacesContext.responseComplete来跳转到生成响应阶段。

2.5、调用应用阶段:

在这个阶段中,JSF将会处理应用级别的事件,例如提交表单或链接到其他页面。

如果需要在该阶段重定向到其他资源,或者生成一个不包含Java Server Faces组件的响应,开发者可以调用FacesContext.responseComplete来跳转到生成响应阶段。

2.6、生成响应阶段:

在这个阶段中,应用准备想客户度输出响应,如果使用了JSP页面,JSF将调用JSP容器来处理响应。如果是初始请求,页面上的组件将被JSP容器添加到组件树中;如果不是初始请求,那么所有组件都已被添加到组件树中,因此不需要再次添加。

如果在提交表单阶段,并且在应用请求值阶段、处理阶段或更新模型阶段遇到了错误,应用将会选择生成最初的页面。

生成响应后,应用的响应状态也被保存下来。

JSF提供了PhaseId类来代表生命周期阶段,本质上是一个枚举类,常常使用的常量:

ANY_PHASE:任意一个生命周期阶段
RESTORE_VIEW:恢复视图阶段
APPLY_REQUEST_VALUES:应用请求值阶段
PROCESS_VALIDATIONS:处理输入校验阶段
UPDATE_MODEL_VALUES:更新模型的值阶段
INVOKE_APPLICATION:调用应用阶段
RENDER_RESPONSE:生成响应阶段
除了文章中有特别说明,均为IT宅原创文章,转载请以链接形式注明出处。
本文链接:http://www.itzhai.com/jsf-notes-jsf-life-cycle-of-running-processes-and-introduce.html
关键字: ,
arthinking Java技术交流群:280755654,入门群:428693174 more
分享到:
 
2011 12/4
如果您有更好的原创技术博文或者观点,欢迎投稿:admin@itzhai.com,或者关注订阅左侧浮动面板的微信号订阅IT宅itread)发送消息。
文章评论
    没有评论
给我留言

有人回复时邮件通知我
J2EE的相关文章
随机文章 本月热门 热评
1 Java使用默认浏览器打开超链接 2011/5/10
2 Hibernate的框架结构及其工作流程 2011/5/27
3 Python语法笔记2 2014/3/9
4 Java Web笔记 – Servlet中的Listener监听器的介绍 常用监听器接口 实现监听器 2011/11/12
5 WebLogic服务器的安装,基本配置和使用 2011/11/30
6 C++语法笔记 – 多态性 2011/9/3
友情推荐 更多
破博客 文官洗碗安天下,武将打怪定乾坤。多么美好的年代,思之令人泪落。
Mr.5's Life 白天是一名程序员,晚上就是个有抱负的探索者
行知-追寻技术之美 关注大数据,分布式系统
我爱编程 编程成长轨迹
Cynthia's Blog 学习笔记 知识总结 思考感悟
 
欢迎关注我的公众号 IT宅
关于IT宅 文章归档

IT宅中的文章除了标题注明转载或有特别说明的文章,均为IT宅的技术知识总结,学习笔记或随笔。如果喜欢,请使用文章下面提供的分享组件。转载请注明出处并加入文章的原链接。 感谢大家的支持。

联系我们:admin@itzhai.com

Theme by arthinking. Copyright © 2011-2015 IT宅.com 保留所有权利.