`
zyl
  • 浏览: 486253 次
社区版块
存档分类
最新评论

关于jsf 生命周期

阅读更多
    这是jsf 的分析系列第三篇,随着不断的深入,jsf的设计变得越来越清晰。当然,在目前的规范中,jsf还是很不完善的,这也就导致了为什么jsf还是不能成为目前的主流框架。先不去谈论这些弊端,还是先看看一下jsf具体是如何运作的。
    对于jsf规范,个人觉得和其他框架相比,最大的区别,可能在于jsf划分了web 请求的生命周期。like ejb一样,web 请求也是有生命周期的。虽然,在其他的框架中,也可以看到相关的生命周期,但还是没有jsf划分的清晰。也许,这也是jsf的一大特色。
    对于生命周期的执行,所有的操作都归结到Lifecycle这个接口。接口包括了两个主要的方法:
    public abstract void execute(FacesContext context) throws FacesException;和
    public abstract void render(FacesContext context) throws FacesException;
   前者是用来执行各个生命周期的阶段,也就是除了render之外的其他五个阶段,而且是按照相应的顺序执行。而render,是执行最后一个阶段,展示页 面。可能有人不太理解,为什么不把两个方法合并成一个方法,刚开始,我也是这么认为。既然已经定义了相应的Phase,何必要把最后的render过程分 离出来。看了sun 的RI实现类,发现在render之前需要进行context.getResponseComplete()判断,可能规范中,认为render是必须要 执行的阶段,其他的阶段可以跳过,所以分离了相应的方法,同时在执行前,为了避免重复输出,需要对render过程进行特殊的处理.
   规范中定义了6个阶段,从下面的流程图中可以看到。

简单介绍一下每个阶段的工作:

RESTORE_VIEW:查找原有的view ,恢复原有的状态,如果没有,则调用ViewHandler.createView,如果为post操作,则按照顺序执行各个阶段。
否则执行RENDER_RESPONSE阶段。
APPLY_REQUEST_VALUES:读取客户端参数,处理各个组件的processDecodes方法,内部调用decode方法,由Renderer执行decode方法
PROCESS_VALIDATIONS:执行组件的processValidators方法,对于UIInput执行validate方法,用于绑定值,调用convert,和validate
UPDATE_MODEL_VALUES:执行组件的processUpdates方法,对于UIViewRoot,执行broadcastEvents和notifyPhaseListeners
所有的UIInput,执行updateModel方法。
INVOKE_APPLICATION:调 用UIViewRoot.processApplication方法。这一过程主要读取相应的action配置,如果存在action,则调用 action,也就是调用应用逻辑。在执行完相应的逻辑后,查询action是否返回值,如果有,由navigationHandler去读取下一个 view id。
RENDER_RESPONSE:展示view,调用ViewHandler.renderView,展示view。

每 个阶段定义定义的都比较清晰,有一点需要注意的是,在处理请求时,并不一定会执行每个阶段,可能其中会直接跳到最后的render response阶段。举例来说,如果validator时,存在错误信息,那么就会直接到render response阶段,而下一个阶段不会执行。


分享到:
评论
4 楼 yoyozhang 2007-05-04  
SteveGY 写道
其实,jsf这东西实在有点无聊了,随便哪一个做过asp.net研究的,立刻可以发现,其实就是模仿了asp.net的web框架和对象生命周期,以及服务器端事件(Server events),甚至viewstate这种词汇都是抄来的,这东西一点没有都创新。
而且,jsf使用jsp作为view,其中的一般UI控件都是tag,这是一个有很大潜在问题的设计,由于tag编程本身不是一件非常简单事情,它严重影响UI控件复用编码的简单性,对照asp.net的UI控件可复用性和简便性,tag简直太失败了。
tag的另一个问题,是在嵌套使用tag的时候,你必须在设计一开始就确定,自己开发的这个tag是否在将来需要内嵌套其他控件还是可能被其他tag嵌套,这是一个很讨厌的问题,对想使用多个tag组合的设计想法构成障碍。如果你使用过jsf:subview就马上有体会了。


的确,如果用JSP的话,跟JSF和起来用的确很麻烦,但现在这个问题已经解决了,那就是用Facelets来代替JSP!这样不仅可以简单的写复合组件,和可以方便的让HTML和JSF组件混合使用!
3 楼 rainlife 2007-05-04  
引用
没有看过.net的设计,看来jsf是有抄袭的嫌疑了

JSF是借鉴了ASP.NET的思想。
2 楼 zyl 2007-05-04  
SteveGY 写道
其实,jsf这东西实在有点无聊了,随便哪一个做过asp.net研究的,立刻可以发现,其实就是模仿了asp.net的web框架和对象生命周期,以及服务器端事件(Server events),甚至viewstate这种词汇都是抄来的,这东西一点没有都创新。
而且,jsf使用jsp作为view,其中的一般UI控件都是tag,这是一个有很大潜在问题的设计,由于tag编程本身不是一件非常简单事情,它严重影响UI控件复用编码的简单性,对照asp.net的UI控件可复用性和简便性,tag简直太失败了。
tag的另一个问题,是在嵌套使用tag的时候,你必须在设计一开始就确定,自己开发的这个tag是否在将来需要内嵌套其他控件还是可能被其他tag嵌套,这是一个很讨厌的问题,对想使用多个tag组合的设计想法构成障碍。如果你使用过jsf:subview就马上有体会了。


没有看过.net的设计,看来jsf是有抄袭的嫌疑了,对于tag,我也是比较反感,还有那个viewstate管理,也不是令人那么的满意。目前,只是想看看jsf到底能给我们带来什么。
1 楼 SteveGY 2007-05-04  
其实,jsf这东西实在有点无聊了,随便哪一个做过asp.net研究的,立刻可以发现,其实就是模仿了asp.net的web框架和对象生命周期,以及服务器端事件(Server events),甚至viewstate这种词汇都是抄来的,这东西一点没有都创新。
而且,jsf使用jsp作为view,其中的一般UI控件都是tag,这是一个有很大潜在问题的设计,由于tag编程本身不是一件非常简单事情,它严重影响UI控件复用编码的简单性,对照asp.net的UI控件可复用性和简便性,tag简直太失败了。
tag的另一个问题,是在嵌套使用tag的时候,你必须在设计一开始就确定,自己开发的这个tag是否在将来需要内嵌套其他控件还是可能被其他tag嵌套,这是一个很讨厌的问题,对想使用多个tag组合的设计想法构成障碍。如果你使用过jsf:subview就马上有体会了。

相关推荐

    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生命周期的事件处理

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

    JSF生命周期及组件开发P

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

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

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

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

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

    JSF请求处理生命周期图

    JSF请求处理生命周期图

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

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

    Java[1].Server.Faces编程2.zip

    `Java.Server.Faces编程-016.jpg` 可能讲解了事件处理机制,`Java.Server.Faces编程-023.jpg` 可能涉及转换和验证过程,而`Java.Server.Faces编程-028.jpg` 可能是关于JSF生命周期的图表。 总的来说,Java Server ...

    jsf例子\监听器 例子

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

    jsf语法及配置大全

    JSF简介 JSF基础 JSF标签 JSF应用程序 JSF生命周期 JSF配置大全

    JSF简介(xiaobo原创视频).part2.rar

    由于JSF的资源较少,继[JSF视频轻松搞定]后,现在接着发布xiaobo原创视频,希望大家多多支持! 有两部分,这是第一部分,第2个压缩包,共4个压缩包!~

    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的必读教科书

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

    jsf规范

    2. **JSF请求生成JSF响应**:这是最常见的场景,当用户通过JSF组件提交表单时,请求会映射到JSF实现的控制器,然后按生命周期的顺序执行,包括解析请求参数、更新模型值、执行验证和事件处理等。 **生命周期情景** ...

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

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

Global site tag (gtag.js) - Google Analytics