首页 > 代码库 > JSF生命周期学习
JSF生命周期学习
JSF页面的生命周期与JSP页面的生命周期相类似:客户相页面发出HTTP请求,服务器返回翻译成HTML的响应,但JSF提供了更多处理页面的服务。生命周期与页面编写者无关,这个概念主要面对开发人员。
1. 重建视图阶段(Restore View Phase)
当请求JSF页面时,如点击按钮或链接,JSF开始重建视图阶段。
在 这个阶段JSF建立页面的视图,给视图中的组件设置事件处理器、校验器,在FacesContext中保存视图。FacesContext含有所有处理请 求的信息,所以页面元素包括组件标签、事件处理器、转换器、校验器都要接触FacesContext。如果请求是第一次的请求,JSF在这个阶段产生一个 空的视图,生命周期进入显示应答阶段,这个空的视图会在页面返回的时候用到。如果请求是返回的请求,对应于这个页面的视图已经存在,JSF用存在客户端或 服务器端的信息重建视图。
2. 应用视图值阶段(Apply Request Values Phase)
在组件树重建后,每一个树上的组件用decode方法从请求中解出其新的值,这个值保存在组件中。如果值数据转换失败,产生与此组件相联系的错误,并入FacesContext的上下文,错误信息在其后的显示应答阶段显示。
如果任何decode方法或事件监听器调用了当前FacesContext的renderResponse方法,则JSF直接跳到显示应答阶段。如果在这个阶段有事件产生,JSF广播事件到感兴趣的监听器。
如果此时应用转到另一个web应用或应答不含有JSF组件,则调用FacesContext.renderComplete方法。在此阶段结束时,所有组件已得到新值,错误信息和事件已入队列。
3. 处理校验阶段(Process Validations Phase)
此阶段,JSF处理所有组件树上注册的校验器,检查设置了校验的组件属性,如果值不合法JSF在上下文(FacesContext)中加入错误信息,生命周期直接进入显示应答阶段,显示错误信息,如果有转换错误也会显示。
如果任何validate方法或事件监听器调用上下文的renderResponse方法,JSF直接跳到显示应答阶段。
4. 更新模型值阶段(Update Model Values Phase)
在JSF确定数据合法之后,遍历组件树,从组件中取得相应值设置到服务器对象上。
如果任何updateModels或监听器调用renderResponse方法,JSF直接跳到显示应答阶段。
5. 调用应用阶段(Invoke Application Phase)
此阶段,JSF除了应用级别事件,如:表格提交或到其它页面的链接等;重建视图时产生的事件广播到感兴趣的监听器上,JSF计算应答到新的页面。
6. 显示应答阶段(Render Response Phase)
此阶段,如果应用是JSP页面,JSF将控制转到JSP容器。
如果是第一次请求,执行JSP页面是会把页面上显示的组件加到组件树中。当JSP容器遍历页面的标签时组件会将自己显示出来。如果是返回的请求且在其它阶段产生了错误,则显示原始页面并显示错误信息。
JSF生命周期学习