JSF生命周期(life cycle)

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


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

  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生命周期中的一种特殊的情况。


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


Restore View(视图重建)阶段:

 

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

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

 

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

 

应用请求阶段(Apply Request Values Phase

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

 

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

 

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

 

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

 

这时,如果程序需要跳转到一个不同的应用中或者产生一个不包含任何JSF组件的响应的时候,可以调用FacesContext.responseComplete

 

验证处理阶段(Process Validations Phase

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

 

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

 

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

 

更新模型值(Update Model Values Phase

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

 

应用执行阶段(Invoke Application Phase

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

 

请求渲染阶段(Render Response Phase

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

你可能感兴趣的:(JSF)