http://docs.oracle.com/javaee/6/tutorial/doc/docinfo.html html
查看其中 Part II Web tier --> javaserver faces technology --> advance concepts (高级概念) java
前言:充分理解JSF生命周期对于JSF开发意义重大 服务器
发现网上有了官方的对应翻译 直接拿了用了(生命周期图换成了官方的) 架构
JSF是一个Web应用,也会遵循请求/相应的架构,与JSP的生命周期彻底类似:客户端发送一个HTTP请求,服务器端对请求进行处理以后,向客户端送回HTTP响应,整个JSP生命周期完成。JSF将请求/响应的生命周期细化为更多阶段,从而支持更加复杂的UI组件模型。 oracle
当客户端向某个JSF页面发送请求时,例如单击了某个超连接或者按钮时,JSF就开始恢复视图阶段。
在这个阶段,JSF将会为该页面建立对应的视图,并将事件监听器、输入校验器等链接到页面所包含的UI组件上,使用FacesContext实例来保存视图对象。此时,应用相关的全部组件,包括UI,事件处理器,转换器和输入校验器均可以访问到该FacesContext实例。 spa
若是是初始请求:JSF将在该阶段建立一个新的视图对象,并将生命周期阶段直接推动到生产响应阶段。
若是是提交表单:则对应该页面的视图已经存在,JSF将会采用客户端或服务器端的信息来恢复视图。 翻译
当视图恢复完成后,每一个组件都会调用它的decode方法从请求参数中提取新的参数值,并保存在本地组件上(保存以前须要先进行类型转换,若是值转换失败,JSF将会使用FacesContext来保存与组件相关的错误消息,并将消息放入消息对了中,这些消息将会等到输出响应阶段几种处理)。 code
若是任何组件的decode方法或者事件监听器调用了FacesContext的renderResponse方法,那么JSF将会直接推动到生成响应阶段。 server
若是页面的某个组件设置了immediate="true",这个阶段还会处理这些组件相关的验证、转换和事件等。 htm
在这个阶段,应用能够重定向到其余资源,或者生成一个不包含Java Server Faces组件的响应,若是须要实现这种处理,开发者必须调用Facescontext。responseComplete来跳过生成响应阶段。
这个阶段结束后,全部组件都被设置成了他们的新值,全部消息和事件都被放入队列。
处理UI组件注册的输入校验器,JSF会用各UI组件上的本地值和对应输入校验规则进行比较,若是本地值无效,JSF就会把对应的错误消息添加到FacesContext实例中,而JSF的生命周期也将直接推动到生成响应阶段,显示页面能够经过<h:message>或者<h:messages>来显示输入校验的错误信息。
在这个阶段中,任何validator方法和事件监听器调用了当前的FacesContext实例的renderResponse方法,那么应用的生命周期将会直接推动到生成响应阶段。
若是须要在该阶段重定向到其余资源,或者生成一个不包含Java Server Faces组件的响应,开发者能够调用FacesContext.responseComplete来跳转到生成响应阶段。
经过了输入校验以后,使用UI组件的本地值更新与之绑定的托管Bean(将用户输入的数据传送给服务器端的托管Bean),JSF只会更新绑定到输入组件的托管Bean。
若是没法更新,则会生成错误信息,生命周期直接推动到生成响应阶段,能够采用<h:message>或<h:messages>来显示错误信息。
在这个阶段中,若是任何updateModels方法或事件监听器调用了当前FacesContext实例的renderResponse方法,生命周期将会直接推动到生成响应阶段。
若是须要在该阶段重定向到其余资源,或者生成一个不包含Java Server Faces组件的响应,开发者能够调用FacesContext.responseComplete来跳转到生成响应阶段。
在这个阶段中,JSF将会处理应用级别的事件,例如提交表单或连接到其余页面。
若是须要在该阶段重定向到其余资源,或者生成一个不包含Java Server Faces组件的响应,开发者能够调用FacesContext.responseComplete来跳转到生成响应阶段。
在这个阶段中,应用准备想客户度输出响应,若是使用了JSP页面,JSF将调用JSP容器来处理响应。若是是初始请求,页面上的组件将被JSP容器添加到组件树中;若是不是初始请求,那么全部组件都已被添加到组件树中,所以不须要再次添加。
若是在提交表单阶段,而且在应用请求值阶段、处理阶段或更新模型阶段遇到了错误,应用将会选择生成最初的页面。
生成响应后,应用的响应状态也被保存下来。
JSF提供了PhaseId类来表明生命周期阶段,本质上是一个枚举类,经常使用的常量:
http://docs.oracle.com/javaee/6/tutorial/doc/bnaqq.html#glprc