JSF和Facelets的生命周期
JSF的生命周期:
1:重载视图。试图从session,cookie还原JSF组件树,不能重载的视为第一次请求,直接转到renderview,画面重画阶段,对画面进行重画
2: 应用请求值阶段
主要把浏览器过来的数据反映到对应的组件。也可以看做数据绑定。另外还作了一个很重要的处理。事件EVENT的队列进入处理。
此处被加入队列中的消息事件在第五个阶段被加以处理。
主要调用过程是:Lifecyle.execute()->ApplyRequestValuesPhase.execute()->Component.processDecodes()
->Component.decode()->Component.valueBinding->Renderer.decode()->Component.queueEvent()
3:验证 合法性检查阶段
此阶段对数据进行合法性检查。检查有错时,跳转到画面重画阶段进行重画
4 更新模型值
此阶段把经过变换 (converter 变换等)后的组件反映到 backingbean
主要调用过程:Lifecycle.execute()->UpdateModleValuesPhase.execute()->UIViewRoot.processUpdates->HtmlForm.processUpdates->
UIInput.processUpdate->UIInput.updateModel-ValueBinding(#{beanname.propertyName}) backingbean
5 事件处理 InvokeApplicationPhase (用户应用程序处理/事件处理阶段)
这阶段主要调用用户的应用程序的事件处理方法,对真正的业务逻辑加以处理。它是JSF和用户程序进行接口的部分。
调用过程Lifecycle.execute()->InvokeApplicationPhase.execute()->UIViewRoot.processApplication->HtmlCommandButton.broadcast->ActionListenerImpl.processAction-MethodBinding
(#{beanName.method.methodName})->BackingBean.eventMethod
6 render(页面重画) 同页面初始化的页面重画处理
Facelets的生命周期:
JSP 是种生成 servlet 的模板化语言。JSP 的主体与 servlet 的 doGet() 和 doPost() 方法等价(也就是说,成为 jspService() 方法)。JSF 定制标记(例如 f:view 和 h:form)只是调用 JSF 组件来呈现它们自己的当前状态。JSF 组件模型的生命周期独立于 JSP 生成的 servlet 的生命周期。这种独立性就是混淆的来源。