`

JSF的生命周期

    博客分类:
  • jsf
 
阅读更多
JSF 应用程序生命周期的六个阶段是:

1.     恢复视图

2.     应用请求值;处理事件

3.     处理检验;处理事件

4.     更新模型值;处理事件

5.     调用应用程序;处理事件

6.     显示响应

这六个阶段是 JSF 处理表单 GUI 的一般次序。这个列表按照每个阶段可能的执行次序和事件处理进行排列,但是 JSF 生命周期并不是固定的。可以改变执行的次序,跳过某些阶段或完全脱离生命周期。例如,如果一个无效的请求值被复制到组件,那么会重新显示当前视图,并可能不执行某些阶段。

还可以选择完全脱离 JSF,比如将处理委托给一个 servlet 或另一个应用程序框架。在这种情况下,可以执行一个 FacesContext.responseComplete 方法调用,将用户重定向到另一个页面或 Web 资源,然后使用请求调度器(从 FacesContext 中的请求对象获得)转发到适当的 Web 资源。也可以调用 FacesContext.renderResponse 来重新显示原来的视图。

最重要的是,在利用生命周期组织您的开发工作的同时不会受其束缚。在需要时可以修改默认的生命周期,而不必担心破坏应用程序。在大多数情况下,您会发现采用 JSF 的生命周期是值得的,因为它非常符合逻辑。

在执行任何应用程序逻辑之前,必须检验表单;在执行检验之前,必须对字段数据进行转换。如果坚持采用生命周期,您就可以集中精力考虑检验和转换的细节,而不必关注请求过程本身的阶段。还要注意,其他 Web 框架也有相似的生命周期;只不过没这么明显。

一些使用 JSF 的开发人员可能从来没有编写过组件或扩展过框架,而其他开发人员的工作却集中在这些任务上。 尽管对于几乎任何项目,JSF 生命周期都是相同的,开发人员可以根据其在项目中的角色参与不同的阶段。如果您主要从事整体应用程序开发,那么可能关注请求处理生命周期中间的几个阶段:

应用请求值
处理检验
更新模型值
调用应用程序
如果您主要从事 JSF 组件开发,那么可能关注生命周期的第一个阶段和最后一个阶段:

恢复视图
显示响应
下面分别讨论一下 JSF 请求处理生命周期的每个阶段,包括事件处理和检验。在开始之前,先看看图 5,图 5 显示 JSF 应用程序生命周期的概况:

 

阶段 1:恢复视图

在 JSF 生命周期的第一个阶段 — 恢复视图 中,通过 FacesServlet servlet 发来一个请求。这个 servlet 检查这个请求并提取出视图 ID(视图 ID 由 JSP 页面的名称决定)。

JSF 框架控制器使用这个视图 ID 为当前视图寻找组件。如果这个视图还不存在,JSF 控制器就创建它,然后调用get方法(返回一个null),然后调用set方法(此时后台bing的组件将会被赋上值),然后进入渲染阶段。

如果视图已经存在,JSF 控制器就使用它,此时会调用组件对应的set方法进行恢复视图(会将上一次的值传入),而get方法此时不会调用。视图包含所有 GUI 组件。生命周期的这个阶段有三种视图实例:新视图、初始视图和 postback,每种视图的处理方法各不相同。对于新视图,JSF 构建一个 Faces 页面的视图,并将事件处理函数和检验器连接到组件。视图保存在一个 FacesContext 对象中。

FacesContext 存储状态信息,JSF 需要使用这些信息为当前请求管理 GUI 组件的状态。FacesContext 将视图存储在它的 viewRoot 属性中;viewRoot 包含与当前视图 ID 对应的所有 JSF 组件。

对于初始视图(第一次装载页面),JSF 创建一个空视图。在处理 JSP 页面时,填充这个空视图。填充初始视图之后,JSF 直接进入显示响应阶段。

对于 postback(用户返回到以前访问过的一个页面),与页面对应的视图已经存在,所以只需恢复它。在这种情况下,JSF 使用现有视图的状态信息重新构造它的状态。

阶段 2:应用请求值

应用请求值 阶段的目标是获取每个组件的当前状态。首先,必须从 FacesContext 对象获取或创建组件,然后获取它们的值。组件值常常取自请求参数,但是也可以取自 cookie 或请求头。对于许多组件,来自请求参数的值存储在组件的 submittedValue 中。

如果组件的直接事件处理属性是 true,那么值被转换为正确的类型并被检验(在下一阶段中进一步进行转换)。然后,将转换后的值存储在组件中。如果值转换或值检验失败,那么生成一个错误消息并放在 FacesContext 中,在显示响应阶段,这个错误消息与任何其他检验错误一起显示。

阶段 3:处理检验

转换和检验一般发生在处理检验 阶段。组件转换并存储它的 submittedValue。例如,如果字段绑定到一个 Integer 属性,那么值就转换为一个 Integer。如果值转换失败,那么生成一个错误消息并放在 FacesContext 中,在显示响应阶段,这个错误消息与任何其他检验错误一起显示。

在应用请求值阶段之后,发生生命周期的第一次事件处理。在这个阶段,根据应用程序的检验规则检验每个组件的值。检验规则可以是预定义的(JSF 附带的),也可以由开发人员定义。将用户输入的值与检验规则进行对比。如果输入的值是无效的,就将一个错误消息添加到 FacesContext 中,并将组件标为无效。如果一个组件被标为无效,JSF 就跳过其他阶段,进入显示响应阶段,就会显示当前的视图和检验错误消息。如果没有发生检验错误,JSF 就进入更新模型值阶段。

阶段 4:更新模型值

JSF 应用程序生命周期的第四个阶段 — 更新模型值 — 通过更新托管 bean 的属性,更新服务器端模型的实际值。只有绑定到一个组件的值的 bean 属性被更新。注意,这个阶段在检验之后发生,所以可以确信复制到 bean 属性的值是有效的(至少在表单字段级上有效;它们在业务规则级上仍然可能是无效的)。

阶段 5:调用应用程序

在生命周期的第五个阶段 — 调用应用程序 — JSF 控制器调用应用程序来处理表单提交。组件值已经经过转换、检验并应用于模型对象,所以现在可以使用它们执行应用程序的业务逻辑。

在这个阶段,调用您的动作处理方法,比如这个示例应用程序的 ContactController 中的 persist() 方法和 read() 方法。

在这个阶段,还为一个给定的序列或可能的多个序列指定下一个逻辑视图。对于成功的表单提交,可以定义特定的结果并返回这个结果。例如,在得到成功的结果时,将用户转移到下一个页面。为了让这个导航操作起作用,必须在 faces-config.xml 文件中以导航规则的形式为成功的结果创建一个映射。发生导航之后,就进入生命周期的最后一个阶段。JSF 获得从动作方法返回的对象并调用它的 toString() 方法。然后使用这个值作为导航规则的结果。(在 第 1 部分 中讨论过导航规则的配置。)

阶段 6:显示响应

在生命周期的第六个阶段 — 显示响应,显示视图和它的所有组件,这些组件都处于当前状态。如果对组件的属性进行的绑定,此时将会调用get方法。

分享到:
评论

相关推荐

    JSF生命周期总结JSF生命周期总结

    JSF生命周期总结JSF生命周期总结JSF生命周期总结JSF生命周期总结JSF生命周期总结JSF生命周期总结

    JSF 生命周期 实例详解

    JSF生命周期主要分为6个阶段:恢复视图、应用请求值、过程验证、更新模型值、调用应用逻辑和渲染响应。这些阶段构成了一个处理HTTP请求的连贯流程,使得开发者能够更好地组织和管理Web应用程序的各个组件。 1. **...

    JSF生命周期及组件开发

    ### JSF生命周期及组件开发详解 #### 一、JSF生命周期概述 JavaServer Faces (JSF) 是一种基于Java EE标准的服务器端组件框架,用于简化企业级Web应用程序的开发。JSF提供了一种声明式的组件化编程模型,使得...

    jsf生命周期学习文档

    【JSF生命周期详解】 JSF(JavaServer Faces)是一种基于Java的Web应用程序开发框架,它以组件为中心,简化了服务器端应用程序的用户界面构建。JSF的核心组成部分包括预定义的UI组件、事件驱动的编程模型以及支持第...

    JSF生命周期及组件开发P

    JSF生命周期是指从客户端发起请求到服务器响应的过程,它包括了五个主要阶段:恢复视图、应用请求的值、处理验证、更新模型值、调用程序和处理事件以及进行响应。 1. **恢复视图阶段**: 在这个阶段,JSF框架通过...

    JSF生命周期的事件处理

    ### JSF生命周期的事件处理 JavaServer Faces(简称JSF)是Java平台提供的一种用于构建企业级Web应用程序的标准框架。JSF通过定义一套简洁而强大的API来帮助开发者更轻松地开发用户界面。其中,JSF的生命周期管理...

    JSF生命周期实例,还要多长啊

    JSF生命周期是理解其工作原理的关键,它包括六个主要阶段:恢复视图、应用请求值、处理验证、更新模型值、调用应用逻辑和渲染响应。在这些阶段中,每个阶段都有特定的任务,确保用户输入被正确处理并更新到服务器端...

    jsf生命周期和一部分标签介绍

    JSF生命周期是理解其工作原理的关键,该过程分为六个阶段:恢复视图、应用请求值、处理验证、更新模型值、调用应用事件和渲染响应。 1. **恢复视图阶段(Restore View)**: 在这个阶段,JSF框架试图找到与当前...

    JSF 应用程序的生命周期.rar

    总的来说,JSF生命周期提供了一种有序的方式来处理Web应用程序的用户交互,简化了开发流程,同时也提供了强大的功能和灵活性。开发者可以根据需求利用JSF的生命周期特性,优化应用程序的性能和用户体验。

    (转自IBM)JavaServer Faces 1.2 入门,第 2 部分 JSF生命周期、转换、检

    博文链接:https://kencool.iteye.com/blog/178031

    jsf的必读教科书

    本篇文章将基于《JavaServer Faces Specification Version 2.2》文档的关键信息,深入解读JSF 2.2的核心概念、生命周期以及一些关键特性。 #### 二、JSF 2.2 版本概述 JSF 2.2 版本是由Oracle公司发布的一个重要...

    jsf例子\监听器 例子

    4. **事件处理与JSF生命周期的关系**: 在JSF生命周期的不同阶段,事件被处理并传播给已注册的监听器。监听器可以决定是否中断或继续生命周期。例如,如果监听器在处理值变化事件时发现错误,它可以调用`...

    jsf1.2 source code

    API提供了如`UIComponent`、`FacesContext`、`PhaseListener`等核心组件和上下文对象,它们构成了JSF生命周期的基础。开发者可以使用这些接口来创建自定义组件,实现监听器,以及处理请求和响应。 ### 2. `jsf-ri` ...

    JSF基础教程 简体中文

    要开发 JSF 组件,您需要更深入了解 JSF 的一些处理细节,包括了 JSF 生命周期以及 JSF 框架。 o JSF 生命周期 o 概述自订组件 简单实例 在不考虑组件有子组件的情况下,这边以实际的一个例子来说明开发组件的过程...

    精通JSF中文教程精通JSF中文教程

    通过深入学习本教程,您将掌握JSF的基础知识,包括组件使用、Managed Beans的创建、EL表达式的运用以及JSF生命周期的理解。结合实际项目实践,您将能够熟练运用JSF来构建高效、稳定的Web应用程序。

    jsf demo 各种实例

    **JSF生命周期** 包含6个主要阶段:恢复视图、应用请求值、处理验证、更新模型值、调用应用业务逻辑和呈现响应。在每个阶段,JSF处理用户的输入、执行验证、更新模型并生成响应。 **JSF示例** 在"jsfdemo"这个...

    JSF教程(有关jsf实例的操作步骤)

    JSF生命周期** JSF组件经历了六步生命周期:恢复视图、应用请求值、处理验证、更新模型值、调用应用程序和呈现响应。每一步都提供了插入自定义行为的机会,如验证用户输入或执行业务逻辑。 **4. Facelets** ...

    jsf中文使用教程jsf中文使用教程

    这个过程由JSF生命周期管理,包括初始化、应用请求值、处理验证、更新模型值、调用应用逻辑和渲染响应等阶段。 **JSF的特点**: 1. **组件驱动**:JSF拥有大量的内置组件,如输入字段、按钮、表格等,开发者可以...

Global site tag (gtag.js) - Google Analytics