JSF生命周期(life cycle)

和JSF生命周期相关的请求与响应有两类:分别是Faces response和Non-Faces response,以及Faces request和Non-Faces。jsp


另外有三种场景与此相关分别是:spa

  1. Scenario 1: Non-Faces Request Generates Faces Response
  2. Scenario 2: Faces Request Generates Non-Faces Response
  3. Scenario 3: Faces Request Generates Faces Response

以上描述的是JSF页面和非JSF页面之间转换的问题,能够说是JSF生命周期中的一种特殊的状况。code


标准请求处理的生命周期:orm


Restore View(视图重建)阶段:blog

 

当咱们请求一个JSF页面的时候,这个阶段会出现。JSF会构建这个页面的视图,链接组建的事件处理器和验证器,生命周期

并将页面的视图存到Faces Context的实例中。FacesContext的实例中包含了一切用来处理独立请求的信息。全部应用的组建标签,事件处理器,转换器和验证器都会访问它。队列

 

若是对页面的请求是初次请求,那么系统会给一个空的视图,并将生命周期推动到响应渲染阶段。进程

 

应用请求阶段(Apply Request Values Phase事件

组件树被重建以后,树上的每个组件都会使用它们的decode方法来从请求参数中提取它们的新的值。这些值将会被这些组件本身保存起来。若是在提取值的时候发生了转换失败的错误,那么和这个组件相关的一个错误信息会生成,并进入FacesContext(称为上下文)的队列之中。这个错误信息将会在响应渲染阶段(render response phase)和进程验证阶段产生的全部错误的结果一块儿被显示出来。ci

 

若是解码方法和事件监听器调用了上下文中的renderResponse方法,系统将会进入响应渲染阶段。

 

若是事件在这个阶段中已经被转入队列中,那么系统会事件传递给对其感兴趣的监听。

 

若是某些页面上的组件的当即属性(immediate attributes)被置为真的话,那么,与这个组件相关的验证,转换和关联事件操做都会在这个阶段完成。

 

这时,若是程序须要跳转到一个不一样的应用中或者产生一个不包含任何JSF组件的响应的时候,能够调用FacesContext.responseComplete

 

验证处理阶段(Process Validations Phase

在这个阶段,系统会执行组件树上的组件注册的所有的验证器。系统会根据组件的属性的验证规则与本地值是否一致。

 

若是本地值非法,系统会在上下文中增长一个错误信息。而且将周期跳转到响应渲染阶段。页面会再次渲染以便于显示错误信息。若是有转换的错误也会发生一样的事情。

 

也可能发生像上一个阶段同样的跳转和事件传递的状况。

 

更新模型值(Update Model Values Phase

更新与组件绑定的模型的值。有可能出现转换错误,处理过程同上。其余状况同上。

 

应用执行阶段(Invoke Application Phase

系统在这一阶段中会执行所有的应用级事件。跳转同上。

 

请求渲染阶段(Render Response Phase

若是你使用jsp那么系统会代替jsp容器进行渲染工做。若是是初次请求,系统会将组件加入到组件树上。若是不是则不会。在以上两种状况下,组件都会随着JSP容器解析页面标签的时候一并渲染本身。

相关文章
相关标签/搜索