JSF是一个Web应用,也会遵循请求/相应的架构,与JSP的生命周期完全相似:客户端发送一个HTTP请求,服务器端对请求进行处理之后,向客户端送回HTTP响应,整个JSP生命周期完成。
JSF将请求/响应的生命周期细化为更多阶段,从而支持更加复杂的UI组件模型。
1、JSF将用户请求分成两种:
1、 初始请求:当用户直接向某个页面发送请求时,请求没有附加任何的参数信息。
2、 提交表单:单击表单的提交按钮、提交超链接时,就会发生提交表单请求。
2、JSF的6个生命周期:
2.1、恢复视图阶段:
当客户端向某个JSF页面发送请求时,例如单击了某个超链接或者按钮时,JSF就开始恢复视图阶段。
在这个阶段,JSF将会为该页面创建对应的视图,并将事件监听器、输入校验器等连接到页面所包含的UI组件上,使用FacesContext实例来保存视图对象。此时,应用相关的所有组件,包括UI,事件处理器,转换器和输入校验器都可以访问到该FacesContext实例。
如果是初始请求:JSF将在该阶段创建一个新的视图对象,并将生命周期阶段直接推进到生产响应阶段。
如果是提交表单:则对应该页面的视图已经存在,JSF将会采用客户端或服务器端的信息来恢复视图。
2.2、应用请求值阶段:
当视图恢复完成后,每个组件都会调用它的decode方法从请求参数中提取新的参数值,并保存在本地组件上(保存之前需要先进行类型转换,如果值转换失败,JSF将会使用FacesContext来保存与组件相关的错误消息,并将消息放入消息对了中,这些消息将会等到输出响应阶段几种处理)。
如果任何组件的decode方法或者事件监听器调用了FacesContext的renderResponse方法,那么JSF将会直接推进到生成响应阶段。
如果页面的某个组件设置了immediate="true",这个阶段还会处理这些组件相关的验证、转换和事件等。
在这个阶段,应用可以重定向到其他资源,或者生成一个不包含Java Server Faces组件的响应,如果需要实现这种处理,开发者必须调用Facescontext。responseComplete来跳过生成响应阶段。
这个阶段结束后,所有组件都被设置成了他们的新值,所有消息和事件都被放入队列。
2.3、处理输入校验阶段:
处理UI组件注册的输入校验器,JSF会用各UI组件上的本地值和对应输入校验规则进行比较,如果本地值无效,JSF就会把对应的错误消息添加到FacesContext实例中,而JSF的生命周期也将直接推进到生成响应阶段,显示页面可以通过<h:message>或者<h:messages>来显示输入校验的错误信息。
在这个阶段中,任何validator方法和事件监听器调用了当前的FacesContext实例的renderResponse方法,那么应用的生命周期将会直接推进到生成响应阶段。
如果需要在该阶段重定向到其他资源,或者生成一个不包含Java Server Faces组件的响应,开发者可以调用FacesContext.responseComplete来跳转到生成响应阶段。
2.4、更新模型的值阶段:
通过了输入校验之后,使用UI组件的本地值更新与之绑定的托管Bean(将用户输入的数据传送给服务器端的托管Bean),JSF只会更新绑定到输入组件的托管Bean。
如果无法更新,则会生成错误信息,生命周期直接推进到生成响应阶段,可以采用<h:message>或<h:messages>来显示错误信息。
在这个阶段中,如果任何updateModels方法或事件监听器调用了当前FacesContext实例的renderResponse方法,生命周期将会直接推进到生成响应阶段。
如果需要在该阶段重定向到其他资源,或者生成一个不包含Java Server Faces组件的响应,开发者可以调用FacesContext.responseComplete来跳转到生成响应阶段。
2.5、调用应用阶段:
在这个阶段中,JSF将会处理应用级别的事件,例如提交表单或链接到其他页面。
如果需要在该阶段重定向到其他资源,或者生成一个不包含Java Server Faces组件的响应,开发者可以调用FacesContext.responseComplete来跳转到生成响应阶段。
2.6、生成响应阶段:
在这个阶段中,应用准备想客户度输出响应,如果使用了JSP页面,JSF将调用JSP容器来处理响应。如果是初始请求,页面上的组件将被JSP容器添加到组件树中;如果不是初始请求,那么所有组件都已被添加到组件树中,因此不需要再次添加。
如果在提交表单阶段,并且在应用请求值阶段、处理阶段或更新模型阶段遇到了错误,应用将会选择生成最初的页面。
生成响应后,应用的响应状态也被保存下来。
JSF提供了PhaseId类来代表生命周期阶段,本质上是一个枚举类,常常使用的常量:
ANY_PHASE:任意一个生命周期阶段
RESTORE_VIEW:恢复视图阶段
APPLY_REQUEST_VALUES:应用请求值阶段
PROCESS_VALIDATIONS:处理输入校验阶段
UPDATE_MODEL_VALUES:更新模型的值阶段
INVOKE_APPLICATION:调用应用阶段
RENDER_RESPONSE:生成响应阶段
分享到:
相关推荐
此外,JSF还支持EL(Expression Language)用于在页面中绑定和操作数据,以及JSF的生命周期,包括恢复视图、应用请求值、处理验证、更新模型值和调用应用的后处理动作等阶段。JSF还有强大的国际化支持和错误处理机制...
**JSF生命周期** 包括六步:恢复视图、应用请求值、处理验证、更新模型值、调用应用程序和呈现响应。在每个阶段,开发者可以通过编写特定的监听器或处理器来干预和定制行为。 **EL(Expression Language)** 是JSF...
`FacesContext`是JSF框架的核心上下文对象,它在JSF生命周期中贯穿始终,提供了对请求、响应和应用程序状态的访问。Managed Beans是JSF中的业务逻辑组件,通过`@ManagedBean`和`@RequestScoped`等注解来声明和管理。...
#### 三、JSF生命周期与自订元件 **3.1 JSF生命周期** - **概述**:JSF的生命周期是指从客户端请求到达服务器到服务器响应返回客户端的整个过程。 - **阶段**:主要包括恢复视图、应用请求值、处理验证、更新模型...
Managed Beans可以通过JSF生命周期的不同阶段(如初始化、处理请求、更新模型值和渲染响应)被创建和管理。 **JSF生命周期** 包括六步:恢复视图、应用请求值、处理验证、更新模型值、调用应用事件和呈现响应。每...
总的来说,理解和解决JSF2中的GET参数绑定问题需要对JSF生命周期、EL以及HTTP协议有深入的理解。通过学习和实践,我们可以克服这些挑战,提升我们的JSF开发技能。在实际开发中,应结合文档、社区资源和实验来更好地...
通过阅读这本书,你可以了解JSF的基本架构、生命周期、以及如何创建、渲染和管理用户界面组件。 2. **2007.doc - 收录心得**: 这可能是一位早期JSF开发者的心得体会,包含他们在实践中遇到的问题、解决方法以及...
1. **JSF架构**:介绍JSF如何通过组件树、生命周期和事件处理来工作。JSF的生命周期包括六阶段:恢复视图、应用请求值、处理验证、更新模型值、调用应用逻辑和呈现响应。 2. **Facelets**:作为JSF的默认视图层技术...
学习笔记可能涵盖了JSF的基础概念,如生命周期、组件库、EL表达式、 Managed Beans等。 2. **Web应用开发**:JSF是Web应用开发的一部分,因此笔记可能包含如何创建和配置JSF项目、使用JSF与Servlets和JSP的交互、...
了解JSF,你需要学习JSF生命周期、UI组件、EL表达式以及与后台bean的交互。 EBJ(Enterprise Beans)是JAVA EE的一部分,提供了服务器端的组件模型,主要用于企业级应用开发。主要分为会话bean(Session Beans)和...
崔老师的笔记可能详细介绍了Servlet的生命周期、服务方法以及JSP的脚本元素、指令和表达式。 接着,笔记可能会涉及JavaServer Faces (JSF)技术,这是Sun Microsystems推出的一种用于构建用户界面的MVC框架,简化了...
理解何时使用Session和Cookie,以及它们的生命周期和限制,对构建功能丰富的Web应用至关重要。 7. **过滤器与监听器**:Filter和Listener是JavaWeb的高级特性。过滤器用于在请求处理前后进行拦截和修改,监听器则...
JSP文件在服务器上被转换为Servlet执行,其生命周期与Servlet相似。JSP指令(如`<%@page %>`, `<jsp:include>`)和动作元素(如`<jsp:useBean>`, `<jsp:setProperty>`)提供了强大的页面控制能力。 3. **MVC(Model...
- JSF是一种用于构建用户界面的MVC框架,简化了Web应用的开发,提供了组件模型、事件处理和生命周期管理。 8. **CDI(Contexts and Dependency Injection)** - CDI提供依赖注入和上下文管理,帮助开发者解耦代码...
6. **CDI(Contexts and Dependency Injection)**:CDI提供了依赖注入和上下文管理,简化了组件的生命周期管理和依赖管理。 7. **JTA(Java Transaction API)**:JTA用于处理分布式事务,确保数据的一致性和完整...
1. **Servlet**:HTTP请求处理,生命周期管理,会话跟踪。 2. **JSP**:动态网页生成,EL表达式,JSTL标签库。 3. **JNDI**:命名和目录服务,用于查找和管理资源。 4. **EJB**:企业JavaBean,提供分布式计算,事务...
笔记可能详细解释了Servlet生命周期,如何处理HTTP请求和响应,以及Servlet容器的工作原理。 2. **JSP**:JSP是动态网页技术,允许在HTML页面中嵌入Java代码。笔记可能涉及JSP的脚本元素、指令、EL(Expression ...