首页 / 软件开发 / JAVA / 怀疑论者的JSF: JSF应用程序的生命周期
怀疑论者的JSF: JSF应用程序的生命周期2011-04-11 IBM Rick Hightower与很多流行的观点不同,我们无需了解技术工作原理的所有细节,就可以编写 JSF 应用 程序。您只需要给自己设置一个项目,并从头到尾不断修修补补,这样就可以学习到大量的 知识。另一方面,理解必要的基础知识可以使您的开发工作更加有效 —— 而且会节省很多 时间。在本系列 怀疑论者的 JSF 的第 2 篇文章中,我们将逐一介绍一下 JSF 请求处理生命周 期的 5 个阶段。我们将介绍在每个阶段中会发生什么,以及这些阶段是如何相互连接在一起 的,然后使用一个示例程序来展示实际的生命周期。随着学习的深入,我们还将介绍如何使 用在 第 1 部分 中简要提及的一些内置的 JSF 组件。我们还将向您介绍如何在 JSF 开发中 采用 Struts Tiles,以及如何组合使用 JSF 和 JavaScript 技术进行即时事件的处理。正如上一篇文章中介绍的一样,示例程序的默认编译环境是 Maven。您可以通过点击页面 顶部或底部的 Code 图标下载源代码。为了简单性起见,您会发现与上一篇文章中一样的示 例设置。有关编译环境的设置的详细说明,请参阅 参考资料,其中包括使用 Ant(而不是 Maven)来编译并运行示例程序的说明。JSF 生命周期:概述JSF 程序生命周期的 5 个阶段如下(注意每个阶段的事件处理):恢复视图应用请求的值;处理验证更新模型值;处理事件调用程序;处理事件进行响应;处理事件这 5 个阶段显示了 JSF 通常处理 GUI 的顺序。虽然这个清单列出了每个阶段中事件处 理的可能执行顺序,但是 JSF 的生命周期很难是固定一成不变的。您可以通过忽略某个阶段 或合并整个生命周期从而对执行顺序进行修改。例如,如果一个无效的请求值被拷贝到一个 组件中,那么当前的视图就会重新显示,而有些阶段就可能不会执行。在这种情况中,您可 以执行一个 FacesContext.responseComplete 方法调用,将用户重定向到一个不同的页面上 ,然后使用请求分发器(从 FacesContext 中的请求对象中获得)将其转发到一个适当的 Web 资源上。另外,您可以调用 FacesContext.renderResponse 重新显示原来的视图。(详 细信息请参看下面的示例程序。)关键是让生命周期构成您的开发项目,而不完全依赖于生命周期。在需要时,您可以修改 生命周期,而不用担心破坏您的程序。在大部分情况中,您会发现 JSF 的生命周期是值得遵 守的,因为它的逻辑非常好。表单必须在任何应用程序逻辑执行之前进行验证,并且在进行 验证之前,必须对域中的数据进行转换。遵守生命周期的规定,可以让您更自由地考虑有关 验证和转换的问题,而不是请求处理本身的阶段。有一点非常重要:其他 Web 框架也都具有 类似的生命周期;它们只不过是没有很好地进行宣传。专注有些使用 JSF 的开发者可能从来都不会编写一个组件,也不会对框架进行任何扩展;而 另外一些人则专注于这种任务的开发。尽管 JSF 的生命周期与大部分那其他项目都是相同的 ,但是根据在项目中的角色您可以采用不同的阶段。如果您更专注于通用的应用程序开发, 就可能会关注请求处理生命周期的中间阶段:应用请求值更新模型值调用程序如果您专注于 JSF 组件的开发,就可能会关注于整个生命周期中的第一个阶段和最后一 个阶段:恢复视图