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:生成响应阶段
分享到:
相关推荐
JSF生命周期总结JSF生命周期总结JSF生命周期总结JSF生命周期总结JSF生命周期总结JSF生命周期总结
JSF 生命周期 实例详解 非常不错的介绍
JSF开发介绍JSF开发介绍JSF开发介绍JSF开发介绍JSF开发介绍JSF开发介绍JSF开发介绍JSF开发介绍JSF开发介绍
JSF学习笔记JSF学习笔记JSF学习笔记
JSF学习笔记,总结了jsf的学习知识点,是学习jsf入门的基础
jsf生命周期和一部分标签介绍是我自己总结的,还没有总结玩,下次把完整的提供给大家
JSF入门 JSF标签 JSF运行流程和生命周期 数据转换与验证 事件处理
JSF请求处理生命周期图
JSF生命周期及组件开发
JSF学习笔记,笔记全面,有实例,是学习的好资料!里面包含了实际学习的列子,保证事半功倍
JSF学习笔记,JSF实战,JSF各种组件实用
JSF生命周期及组件开发P
介绍JSF基本构成,包括JSF优点和JSF的请求生命周期,jsf的体系结构
京东jsf服务框架介绍。jsf十分钟入门指南
JSF是一种用于构建Java ... 包含JSP页面的JSF应用程序也使用由为了表现UI组件和在页面上的其他对象的JSF技术而定义的标准的tag库。 Java Server Faces技术的重要开发框架 sun-ri、myfaces、icefaces、richfaces、seam
JSF 应用程序的生命周期.rar
JSF实例笔记 JSF实例笔记 JSF实例笔记 JSF实例笔记 JSF实例笔记 JSF实例笔记 JSF实例笔记 JSF实例笔记 JSF实例笔记 JSF实例笔记 JSF实例笔记
jsf实例 JSF学习 JSF jar包 JSF jsf实例 JSF学习 JSF jar包 JSFjsf实例 JSF学习 JSF jar包 JSF jsf实例 JSF学习 JSF jar包 JSF
自己整理的,参考了网上的一些资料。还算比较清楚吧,生命周期图,有中文有英文。方便理解。
JSF简介 JSF基础 JSF标签 JSF应用程序 JSF生命周期 JSF配置大全