`
famoushz
  • 浏览: 2951137 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

浅谈JSF的生命周期和对ajax处理的影响

阅读更多
JSF一个最重要的特点就是组件化(It is all about components),组件化的特点决定了其可扩展性强和协议无关性。对一个JSF组件来说,为其定义特定的Render,该该组件将在WML或telnet中可用。

解读JSF的生命周期:
我觉得研究B/S系统最好的方法就是从web.xml开始,相比于传统的JSP系统,JSF需要定义一个Servlet用来对HttpServletRequest进行处理,该servlet为javax.faces.webapp.FacesServlet。在该servlet初始化阶段,它将生成两个对象:FacesContextFactory和Lifecycle。而在处理请求的service阶段,则会利用FacesContextFactory对象获得当前的FacesContext,lifecycle对象将会对该context对象进行处理。简单的来说,FacesServlet产生一个FacesContext对象,(在JSF的处理过程中,FacesContext是唯一被修改的对象),然后将控制权交给了lifecycle对象,Lifecycle对象将会在六个生命周期中对FacesContext对象进行处理。有一点需要注意的:FacesContext是ThreadLocal的。
JSF包含六个生命周期:
  1. Restore view
  2. Apply request values; process events
  3. Process validations; process events
  4. Update model values; process events
  5. Invoke application; process events
  6. Render response

其中的1-5个阶段将会执行lifecycle的execute()方法,而第六个阶段将会执行lifecycle的render()方法。

接下来说说如何将AJAX的应用体现在JSF组件上:

1. AJAX完全独立于JSF。即为AJAX请求创建一个额外的Servlet/Filter 控制器,这也是最自然而然的想法。通过传统的ajax请求方式完成该jsf组件的ajax体现,该ajax请求通过jsf组件中写入的js触发。优点是自然,不需要接触JSF层面的东西,比较独立;缺点是重用性差,且页面开发者必须自己写js代码。

2. AJAX嵌入JSF组件中,即需要自定义组件。该方法与方法1很相似,不同的是组件开发者将会封装js代码和js请求获得的呈现代码。即ajax应用已经包装在此组件中了,页面开发者不需要关心该ajax应用是如何完成的,只需要简单调用该组件就可以了。在Lifecycle的Apply Request Values阶段,当ajax请求处理完后,该组件的Renderer将会调用FacesContext的responseComplete()方法退出lifecycle。

3. 使用PhaseListener判断是否为ajax请求,如是,立即执行responseComplete()方法,禁止进入JSF生命周期以后的Phase。看下PhaseListener接口的代码,相信用过Spring的都觉得似曾相识,没错,它提供了2个方法beforePhase()和afterPhase()用来对生命周期中的每一个phase进行pre-action和post-action处理。比较类似Spring中的advice。一般选择在PhaseListner的afterPhase()方法中进行ajax处理,处理的过程其实也很简单,当请求到达服务器端,PhaseListener进行处理,当Restore View阶段完成后如果是ajax请求则进入afterPhase()方法中,进行ajax处理然后调用FacesContext的responseComplet()方法完成lifecycle的处理。这也是目前用的最多的一种处理方法。

4. 定义独立的Lifecycle,该Lifecycle只包含三个Phase,即:Apply Request Values; Invoke Application;RenderResponse。在进入lifecycle之前就判断到底进入何种lifecycle,如果是ajax请求则进入刚定义的包含三个阶段的生命周期,否则则进入常规的六阶段生命周期。其做法就是定义一个类似FacesServlet的选择Lifecycle的servlet,对指定的ajax请求(通过url mapping)进行处理。该方法在Pro JSF and AJAX: Building Rich Internet Components一书中有详细的介绍。本文这次就不详细介绍了。

 

分享到:
评论

相关推荐

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

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

    JSF 生命周期 实例详解

    在深入理解JSF请求处理生命周期之前,我们先要明白JSF的核心目标是简化Web开发,尤其是处理用户输入和更新服务器端状态的过程。生命周期的概念在JSF中扮演着至关重要的角色,因为它自动化了许多传统Web技术中需要...

    JSF生命周期的事件处理

    3. **性能优化**:由于JSF生命周期中涉及多个阶段的操作,因此可能会对应用的性能造成一定影响。为了提高性能,开发者可以采用诸如异步加载视图、减少不必要的验证操作等策略。 #### 四、总结 JSF生命周期中的事件...

    JSF生命周期及组件开发

    在JSF中,客户端发送的请求和服务器端的处理遵循一个特定的生命周期流程,这个流程对于理解JSF应用程序的行为至关重要。 JSF生命周期分为五个主要阶段,每个阶段都有其特定的任务和目的: 1. **恢复视图**...

    ajax4jsf.zip

    4. **JSF生命周期集成**: Ajax4JSF与JSF的完整生命周期紧密集成,确保在处理Ajax请求时,JSF的各个阶段(如应用、渲染等)都能正确执行。 **二、Ajax4JSF的使用步骤** 1. **引入依赖**: 首先,需要在项目中引入...

    jsf生命周期学习文档

    理解JSF生命周期对于调试和优化JSF应用至关重要。每个阶段都提供了干预点,可以添加自定义行为,如自定义验证逻辑、处理异常或控制页面导航。 此外,JSF提供了丰富的第三方组件库,如MyFaces、RichFaces和IceFaces...

    JSF全套(JSF入门教+ LIB+ Ajax4JSF使用手册 )

    这个部分将教你如何配置JSF环境,创建第一个JSF应用,理解JSF生命周期,以及认识JSF的核心组件如输入字段、按钮、表单等。通过这个教程,你可以快速掌握JSF的基础操作。 2. **JSF标签**:JSF的UI组件是以标签的形式...

    JSF生命周期及组件开发P

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

    seam+jsf+richfaces+ajax4jsf 电子书

    - JSF的生命周期和渲染过程 - RichFaces组件的使用和自定义 - Ajax4jsf的集成和Ajax事件处理 - Seam中的依赖注入和事件处理 - 如何利用Seam进行安全性和国际化设置 - 例子和实战项目,展示如何结合使用这些技术构建...

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

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

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

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

    ajax4jsf实例

    - **Ajax事件处理**:Ajax4JSF允许开发者定义和处理各种Ajax事件,比如点击、更改、验证等,这些事件可以在后台服务器端触发相应的处理逻辑,而无需刷新整个页面。 - **Ajax行为组件**:提供了一系列内置的行为组件...

    Ajax4jsf 用户手册

    它将Ajax功能无缝集成到JSF组件生命周期中,提供Action和Value Change监听器,以及服务端验证和转化功能。 - **结构概览**:框架由一系列组件组成,它们协同工作以实现Ajax请求和响应处理。 - **如何发送AJAX请求*...

    ajax4jsf使用中文手册

    Ajax4JSF通过扩展JSF的UIComponent、UICommand和RenderKit接口,为JSF组件添加了Ajax支持。开发者可以使用内置的Ajax事件,如`preRenderView`、`valueChange`等,或者自定义事件,来触发Ajax请求。 ### 4. Ajax4JSF...

    jsf+facelets+ajax4jsf的全部jar包

    Ajax4jsf与JSF生命周期无缝集成,使得在不破坏JSF核心概念的前提下,开发者可以利用Ajax提升用户体验。 4. **jar包**:在Java开发中,jar(Java Archive)文件是用于打包类文件、资源文件以及元数据的容器。在JSF、...

    ajax4jsf-demo

    **Ajax4JSF-Demo 知识点详解**...综上所述,"ajax4jsf-demo"项目为学习和掌握Ajax4JSF库提供了一个实用的起点,通过深入研究和实践,开发者可以将Ajax4JSF的强大力量应用到自己的JSF项目中,提升应用的用户体验和效率。

    jboss-ajax4jsf-1.1.1-src

    在深入研究这个项目时,开发者首先需要了解JSF和Ajax的基础知识,然后可以查看源码以理解Ajax4jsf如何处理Ajax请求和响应,以及如何在JSF组件中集成Ajax功能。此外,通过运行示例或测试代码,开发者能够快速上手并...

    JSF请求处理生命周期图

    JSF请求处理生命周期图

    JSF第一步--JSF+Spring+ Hibernate+AJAX编程实践 试读

    JSF生命周期包括六步:恢复视图、应用请求值、处理验证、更新模型值、调用应用逻辑和渲染响应。开发者可以通过监听这些步骤的事件来定制应用行为。 Spring框架以其强大的依赖注入(DI)和面向切面编程(AOP)功能...

    Ajax4JSF用户指南

    Ajax4JSF的设计目标是无缝集成到JSF生命周期中,提供Action和Value Change监听器、服务器端验证以及在Ajax请求-响应周期中的转换等功能。 在使用Ajax4JSF时,你可以轻松地向已有的JSF项目添加Ajax特性。它通过一个...

Global site tag (gtag.js) - Google Analytics