当一个http 请求来临的时候,
首先会调用FacesServlet的service来处理。
现假设这个请求是第一次请求:
1。执行该生命周期整个阶段的execute方法。//处理除了渲染视图外的所有事情(执行生命周期前五个阶段的事情)。
第一次请求,这里基本不做什么事情。
若是第二次请求。则execute则可能完整的走完其生命周期的六个阶段
这六个生命周期分别由六个Phase来实现
1)RestoreViewPhase
2)ApplyRequestValuesPhase
3)ProcessValidationsPhase
4)UpdateModelValuesPhase
5)InvokeApplicationPhase
6)RenderResponsePhase
1.1RestoreViewPhase.doPhase()当中调用initView()来初始化原来的视图
1.1.1 RestoreViewPhase.execute()执行恢复视图的实际事情
1.1.2 ViewHandler.restoreView()
1.1.2.1 UIViewRoot.processRestoreState(见如下)
1.2ApplyRequestValuesPhase.doPhase()
1.2.1调用ApplyRequestValuesPhase.execute();
1.2.2UIViewRoot.processDecodes()进行相应的解码工作。然后依次调用其子节点。
1.2.2.1调用每个组件的decode()方法。
1.3ProcessValidationsPhase.doPhase()
1.3.1调用ApplyRequestValuesPhase.execute()
1.3.2UIViewRoot.processValidators()
1.4UpdateModelValuesPhase.doPhase()
1.4.1调用ApplyRequestValuesPhase.execute()
1.4.2UIViewRoot.processUpdates()
1.5InvokeApplicationPhase.doPhase()
1.5.1调用ApplyRequestValuesPhase.execute()
1.5.2UIViewRoot.processApplication()
1.5.3UIViewRoot.broadcastEvents()
1.5.3.1processEvents();
1.5.3.1.1 broadcast
2。执行该生命周期的render方法。
2.1。在该方法中调用facesContext.getApplication().getViewHandler().
renderView(facesContext, facesContext.getViewRoot());方法从组件树的根开始渲染。
2.1.1。在这个ViewHandler里有一个方法是buildView创建相应的视图。。。
该组件的所有属性也是在这个时候设置的.包括一些通过EL表达式与BackBean绑定的属性,只不过此时并不把BackBean的数据直接存储在这个Compoment里.
而是存放其相应的表达式,待需要的时候再去取.
2.1.2。然后再调用encodeAll方法,渲染组件树.
参见如下:
2.1.3。StateManager.saveSerializedView(context)来保存视图的状态。
UIViewRoot.processSaveState(context)从树根开始保存视图状态。
2.1.3.1 然后调用该组件的saveState方法(只有当实现了StateHolder接口才该用该方法)
This interface is implemented by classes that need to save their state between requests
生命周期五个阶段。
1。创建或恢复视图//构成一个组件树。
2。应用请求值//把页面上传过来的值赋给相应的组件。这个值一般都是简单类型的。如String等字符串。从调用UIViewRoot的processDecodes方法开始,依次递归
3。处理验证。对在第二阶段形成的组件树。应用转换器与验证器进行验证。从调用UIViewRoot的processValidators方法开始
4。更新模型值。对于在第三阶段验证过的组件树。把组件树的数据绑定到后台的托管 Bean中去。依次从UIViewRoot 调用processUpdates
5。调用应用程序,更新完后台BackBean的数据以后,对于需要触发事件的组件,调用相应的方法,还是调用UIViewRoot的processApplication方法
6。渲染响应。
新增属性设置时间:
在HeadResourceRender中渲染HtmlSimpleTogglePanel的头.
调用先后顺序,
compoment(默认)
encodeAll
-encodeBegin
-render.encodeBegin(下面两个方法richfaces专用)
-render.preEncodeBegin(可重写)
-render.doEncodeBegin(可重写)
-encodeChildren
-render.encodeChildren
-render.preEncodeBegin(可重写)
-render.doEncodeChildren
-render.renderChildren
-encodeEnd
-render.encodeEnd
-render.doEncodeEnd
因此我们写自己的组件,必须重写encodeBegin 并且调用该组件想要做的事情,
然后再调用super.encodeBegin()方法.
对于PFHtmlTableGrid来说,我们主要覆写其encodeBegin方法。
processRestoreState(UIViewRoot):
-restoreState
-循环遍历所有的孩子节点,恢复视图
-孩子节点.processRestoreState
processDecodes(UIViewRoot)
-AjaxContextImpl.invokeOnRegionOrRoot()
-processDecodes()
-decode()方法
象PFHtmlTableGrid的processUpdates就是调用UIDataAdapter的方法。
总结:
对于PFHtmlTableGrid组件来说,它的执行流程如下:
1。若是第一次请求,jsf需要创建一个全新的组件树。
1.1先调用PFHtmlTableGrid.encodeBegin()
1.2然后再调用PFHtmlTableGrid.encodeEnd();
1.3视图渲染完以后,要保存视图的状态,调用PFHtmlTableGrid.saveState();
2.若是第二次请求。jsf则不用创建一个全新的组件树,而是恢复在FacesContext中的相应组件树。
2.1先调用PFHtmlTableGrid.restoreState()//恢复视图阶段
2.2调用PFHtmlTableGrid.decode()//应用请求值阶段
2.3调用PFHtmlTableGrid.processValidates()(如果有的话)//处理验证,一般不用重写。
2.4调用PFHtmlTableGrid.processUpdates()(如果有的话)//处理验证,一般不用重写。
2.5调用PFHtmlTableGrid.broadcast(如果有的话)//处理验证,一般不用重写。
2.6返回渲染视图
分享到:
相关推荐
JSF生命周期总结JSF生命周期总结JSF生命周期总结JSF生命周期总结JSF生命周期总结JSF生命周期总结
JSF生命周期主要分为6个阶段:恢复视图、应用请求值、过程验证、更新模型值、调用应用逻辑和渲染响应。这些阶段构成了一个处理HTTP请求的连贯流程,使得开发者能够更好地组织和管理Web应用程序的各个组件。 1. **...
### JSF生命周期及组件开发详解 #### 一、JSF生命周期概述 JavaServer Faces (JSF) 是一种基于Java EE标准的服务器端组件框架,用于简化企业级Web应用程序的开发。JSF提供了一种声明式的组件化编程模型,使得...
### JSF生命周期的事件处理 JavaServer Faces(简称JSF)是Java平台提供的一种用于构建企业级Web应用程序的标准框架。JSF通过定义一套简洁而强大的API来帮助开发者更轻松地开发用户界面。其中,JSF的生命周期管理...
2. **JSF请求生成JSF响应**:这是最常见的场景,当用户通过JSF组件提交表单时,请求会映射到JSF实现的控制器,然后按生命周期的顺序执行,包括解析请求参数、更新模型值、执行验证和事件处理等。 **生命周期情景** ...
`FacesContext`是JSF的核心对象,它在JSF生命周期中存储了所有请求相关的上下文信息。Managed Beans是JSF中的业务逻辑容器,用于封装和管理应用程序的状态。通过注解(如`@ManagedBean`和`@RequestScoped`)可以方便...
JSF的核心概念包括组件、事件、渲染和生命周期管理。 1. **组件模型**:JSF的核心是其组件模型,允许开发者使用预定义的UI组件(如按钮、文本框等)来构建页面。这些组件可以嵌套、组合,形成复杂的用户界面。每个...
`request`作用域的Bean仅在HTTP请求生命周期内存在,`session`作用域的Bean在用户会话期间有效,`application`作用域的Bean在整个应用程序生命周期内都有效。此外,`none`作用域表示Bean在需要时动态创建。 在JSF...
3. JSF生命周期: JSF应用有七个阶段:恢复视图、验证、应用请求值、处理事件、更新模型值、调用后处理器和渲染响应。每个阶段都有特定的任务,例如在验证阶段检查用户输入的有效性,在更新模型值阶段将表单数据绑定...
- **控制器(Controller)**:JSF生命周期处理用户请求,执行验证、更新模型和调用业务逻辑。 ### JSF模型 JSF模型是应用程序的数据层,由管理Bean(Managed Beans)组成,它们是Java类,包含了应用程序的业务逻辑...
7. **PhaseListener**: 可以监听JSF生命周期的各个阶段,进行自定义处理。 **JSF生命周期** JSF组件的生命周期分为6个阶段: 1. **恢复视图**: JSF从服务器缓存中恢复已渲染的视图。 2. **应用请求值**: 将请求...
4. **JSF生命周期** - JSF处理请求时会经历一系列的生命周期阶段,包括恢复视图、应用请求值、处理验证、更新模型值、调用应用事件和渲染响应。 - 每个阶段都有特定的任务,例如在处理验证阶段,JSF会检查用户输入...
在JSF生命周期中,组件树扮演着至关重要的角色,处理用户的请求、数据绑定以及渲染响应。 **JSF组件树的构造** JSF组件树是基于XML的Facelets模板构建的,每个组件都有自己的属性和事件。根组件通常是`<html>`或`...
它允许开发者在不离开JSF生命周期的情况下,利用Ajax进行页面的异步更新,提升用户体验。本压缩包“ajax4jsf.zip”包含了开发Ajax4JSF应用所需的所有关键组件和库文件,确保开发者可以顺利地开始项目。 **一、Ajax4...
### JSF生命周期 JSF组件有六个主要阶段:恢复视图、应用请求值、处理验证、更新模型值、调用应用程序和渲染响应。在每个阶段,JSF都会执行特定的任务,如解析请求参数、执行验证规则、更新Bean属性等。 ### ...
- `javax.faces.context.FacesContext`:在JSF生命周期中,提供对请求、响应、会话、应用程序范围的访问,以及与视图、渲染器、事件处理相关的服务。 - `javax.faces.event.ActionEvent`和`javax.faces.event....
- 事件和监听器机制的增强使得开发者可以更方便地处理各种组件生命周期事件,提高了代码的组织结构和可维护性。 10. **更完善的错误处理**: - 提供了更全面的错误处理机制,包括异常处理和错误页面配置,使得...
### JSF生命周期 JSF组件有六个主要阶段:恢复视图、应用请求值、处理验证、更新模型值、调用应用事件和呈现响应。在这个过程中,JSF处理用户提交的数据,进行验证,更新模型,然后渲染响应。 ### PPT演示 PPT演示...
#### 三、JSF生命周期 - **生命周期概述**:JSF的生命周期分为几个阶段,包括恢复视图、应用请求值、处理验证、更新模型值、调用应用程序、渲染响应等。了解这些阶段对于理解JSF的工作原理至关重要。 #### 四、...