`
bengan
  • 浏览: 201718 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JSF FacesContext 详解 一

阅读更多
JSF FacesContext 详解 一

在Faces API中有两个类是要经常使用的. 一个是FacesContext 一个是ExternalContext.首先讲解如何使用FacesContext .

对每个JSF请求,FacesServlet对象都会为其获取一个javax.faces. context.
FacesContext类的实例。FacesServlet对象将下列3个取自Web容器的对象传给javax.faces.context.FacesContextFactory对象的getFacesContext方法,以此来做到这一点:

●       javax.servlet.ServletContext
●       javax.servlet.ServletRequest
●       javax.servlet.ServletResponse
这意味着FacesContext的实例里包含了所有处理JSF请求所需的每个请求的状态信息。图3-1展示了FacesContext实例里封装的其他一些对象。
3.2.1  获取当前实例
一个经常用到的方法是静态的getCurrentInstance方法,它返回当前的FacesContext实例。此方法的签名如下:
public static FacesContext getCurrentInstance()
下面的代码是一个用此方法获取FacesContext当前实例的例子:
FacesContext facesContext = FacesContext.getCurrentInstance();
3.2.2  获取和修改组件树
FacesContext实例里最重要的内容是请求页面的组件树。组件树是由javax.faces.tree.Tree类来表示的(本章后面的“使用Tree类”一节会讨论)。FacesContext实例的tree属性就是Tree对象。
要获取或修改Tree对象,可使用tree属性的读取方法和赋值方法:
public abstract Tree getTree()
public abstract void setTree(Tree tree)
3.2.3  添加和获取消息
在 请求处理生命周期里,可能会遇到错误。比如,当验证器执行输入验证时,因为用户输入了不正确的值,验证可能失败;当组件试图把输入值转换为绑定到组件的模 型对象所需的类型时,也可能会失败。所有消息都必须存放到FacesContext实例里以备后面进行处理。比如,您可能希望在页面里显示错误消息,从而 为用户更正错误提供帮助。
错误消息是由javax.faces.application.Message接口(第11章再详细讨论)来表示的,您可以通过使用FacesContext类的addMessage方法向FacesContext实例里添加Message对象。这个方法的签名如下:
public abstract void addMessage(UIComponent component, Message message)
如果component不为空,新加入的message就关联到component上。否则,它就不与任何特定组件的实例相关。
举例来说,验证器在验证组件值失败时可调用FacesContext的addMessage方法,传入值无效的组件及一个包含特定错误消息的Message对象。
所有添加到FacesContext实例的Message对象都被加入到一个集合里。可通过调用getMessages方法的两个重载方法之一来获取加入的Message对象:
public abstract Iterator getMessages()
public abstract Iterator getMessages(UIComponent component)
第一种形式的调用在一个Iterator里返回所有Message对象,而第二种形式的调用则仅返回与给定UIComponent相关联的Message对象。
3.2.4  添加和获取请求处理事件
UIComponent 可以生成FacesEvent对象。比如,当单击一个UICommand组件时,它会生成一个ActionEvent对象(ActionEvent类是 FacesEvent类的子类)。这个FacesEvent对象需要在FacesContext实例里保存起来,以备请求处理生命周期里的下一步处理事件 时所用。
可通过使用FacesContext类的addFacesEvent方法向FacesContext实例添加FacesEvent对象。此方法的签名如下:
public abstract void addFacesEvent(FacesEvent event)
要提取先前添加的FacesEvent对象,可调用getFacesEvents方法,其签名如下:
public abstract Iterator getFacesEvents()
此方法返回FacesEvent时的顺序与其在队列中的顺序一致。
3.2.5  向Response对象里写入信息
为 了向Response对象里写入信息,FacesContext类提供了两个属性,一个是 javax.faces.Context.ResponseStream类型,另一个是 javax.faces.context.ResponseWriter类型。ResponseStream类型的对象用于输出二进制数据,而 ResponseWriter类型的对象则用于输出字符。这些属性的读取方法和赋值方法如下:
public abstract ResponseStream getResponseStream()
public abstract void setResponseStream(ResponseStream responseStream)
public abstract ResponseWriter getResponseWriter()
public abstract void setResponseWriter(ResponseWriter responseWriter)
3.2.6  获取和设置地区
第11章将会讨论到,JSF支持国际化和本地化。这意味着您可以根据用户的地区决定发送什么样的回应信息。locale属性里存放了当前处理中所用的Locale对象。
初始状况下,locale属性的值和网络浏览器里指定的地区是一样的,但可以修改这个值,从而发送输出所使用的地区将独立于浏览器所使用的地区。此属性的读取方法和赋值方法如下:
public abstract Locale getLocale()
public abstract void setLocale(Locale locale)
3.2.7  操作请求处理生命周期
FacesContext类还提供了两个方法与请求处理生命周期进行交互:
●       在当前阶段的处理完成后,调用renderResponse方法通知JSF实现把控制权转到呈现响应阶段。也就是说,处于当前阶段和呈现响应阶段之间的所有其他阶段都不再执行。
●       调用responseComplete方法,告诉JSF实现此次请求的HTTP响应已经完成(比如在使用了HTTP重定向的情况下)。因此,当前阶段完成后,必须中止请求处理生命周期的处理。
这些方法的签名如下:
public abstract void renderResponse()
public abstract void responseComplete()
3.2.8  获取其他请求状态信息
其他每个请求的状态信息封装在ExternalContext对象里,可以使用getExternalContext方法获取该对象:
public abstract ExternalContext getExternalContext()
现在讲解ExternalContext。
使 用ExternalContext类提供的方法可以获取ServletContext、ServletRequest和ServletResponse对 象,构造FacesContext实例时需要这些对象。除此之外,ExternalContext实例提供了包装器方法,可以使用这些方法获得原来需要从 ServletContext、ServletRequest及ServletResponse对象上调用一些方法获得的信息。
分享到:
评论

相关推荐

    JSF FacesContext 详解

    JSF FacesContext 详解 FacesContext 是 JSF 框架中一个核心组件,它负责管理 JSF 请求的状态信息。在 Faces API 中,FacesContext 和 ExternalContext 是两个经常使用的类,本文将详细介绍 FacesContext 的编程...

    JSF实战(中英版)

    **JSF实战(中英版) - JavaServer Faces技术详解** JavaServer Faces(JSF)是一种基于组件的、用于构建Web应用程序的Java EE框架。它为开发者提供了丰富的UI组件库和一套完整的工作流程,简化了前端与后端的交互,...

    jsf1.2

    **JSF 1.2 框架详解** JavaServer Faces (JSF) 是一个用于构建用户界面的Java EE框架,特别适用于Web应用程序的开发。JSF 1.2是该框架的一个重要版本,它在1.1的基础上进行了许多改进和增强,提供了更丰富的功能和...

    JSF1.2的jar包

    **JSF 1.2 知识点详解** JavaServer Faces (JSF) 是一个用于构建用户界面的Java EE框架,特别适用于Web应用程序的开发。JSF 1.2是该框架的一个版本,发布于2007年,相较于早期版本,它提供了更多的功能和改进。以下...

    JSF API

    **JSF API详解** JavaServer Faces (JSF) 是一种基于组件的Web应用程序开发框架,由Java Community Process (JCP) 定义并维护。JSF API是该框架的核心部分,它提供了创建用户界面、处理用户事件、管理应用程序状态...

    JSF2.2基本jar包

    **JSF 2.2 基本jar包详解** JavaServer Faces (JSF) 是Java平台上的一个标准的用户界面框架,用于构建Web应用程序。JSF 2.2是其一个重要的版本,提供了许多增强的功能和改进。在这个场景中,我们关注的是JSF 2.2...

    jsf1.2源代码下载

    **JSF 1.2 源代码详解** JavaServer Faces (JSF) 是一个用于构建用户界面的Java EE框架,它提供了一种组件化的方式来创建Web应用程序。JSF 1.2是该框架的一个重要版本,发布于2007年,带来了许多增强功能和改进,...

    jsf 中文帮助文档

    总的来说,JSF中文帮助文档涵盖了JSF框架的所有关键概念和技术,包括API详解、生命周期、组件使用、数据绑定、验证、导航等,对于希望在Java Web开发中使用JSF的开发者来说,是极具价值的学习资源。通过阅读和实践,...

    JSF和Spring集成.doc

    ### JSF与Spring集成知识点详解 #### 一、概述 **JSF (JavaServer Faces)** 和 **Spring** 都是目前广泛使用的Java Web开发框架。JSF 是一个用于构建基于 Java 的 Web 应用程序的标准组件框架,而 Spring 框架则是...

    JSF api,很详细,很全

    1. **FacesContext**: 是JSF的核心组件,它提供了与当前请求相关的上下文信息,包括请求参数、视图状态、应用程序和会话范围内的属性等。 2. **UIComponent**: 表示JSF中的任何可渲染组件,如按钮、文本框、表格等...

    jsf2+spring sample

    【JSF2与Spring整合详解】 JavaServer Faces 2(简称JSF2)是Java平台上的一个企业级的用户界面框架,它为构建基于Web的应用程序提供了组件化、事件驱动的模型。而Spring框架则是Java后端开发的核心框架,以其依赖...

    JSF API (有索引功能)

    **JSF API(JavaServer Faces Application Programming Interface)详解** JSF,全称为JavaServer Faces,是Java EE平台上的一个标准用户界面组件模型和事件处理框架。它为开发Web应用程序提供了一种模型-视图-控制...

    《JSF自定义组件》

    ### JSF自定义组件知识点详解 #### 一、JSF生命周期与组件概述 **1.1 JSF生命周期** JavaServer Faces (JSF) 是一种基于Java的Web应用框架,主要用于构建用户界面。为了更好地理解如何自定义JSF组件,首先需要...

    JSF1.2.07版源代码

    **JSF 1.2.07 源代码详解** JavaServer Faces (JSF) 是Java平台上用于构建用户界面的官方标准框架,它提供了一种声明式的方式来创建Web应用程序。JSF 1.2是该框架的一个重要版本,引入了许多增强功能和改进,为...

    JSF1.2的新特性总结.

    **JSF 1.2 新特性详解** JavaServer Faces (JSF) 是Java平台上用于构建Web应用程序的一种组件模型。JSF 1.2是该框架的一个重要版本,它引入了一系列新特性和改进,提升了开发效率和用户体验。以下是对JSF 1.2新特性...

    常用手册 JSF及Myfaces帮助.CHM

    通过阅读“JSF及Myfaces帮助.CHM”文档,开发者可以获得JSF和MyFaces的详细指南,包括基本概念、API详解、示例代码和最佳实践,从而更好地理解和掌握这两种技术。在实际开发中,结合文档学习和实践操作,可以有效地...

    JSF编程,共享一本书(二)

    1. **JSF架构**:JSF框架由一系列组件、渲染器、事件处理机制和生命周期组成。开发者可以通过定义自定义组件来扩展其功能。JSF的生命周期包括六到七个阶段,包括恢复视图、应用请求值、处理验证、更新模型值、调用...

    jsf_in_action 英文版

    1. **JSF生命周期**: JSF组件有一个明确的生命周期,包括初始化、处理请求、应用转换和验证、更新模型值、调用后处理方法以及渲染响应。理解这个生命周期对于调试和优化JSF应用程序至关重要。 2. **JSF组件库**: ...

    JSF入门 简体中文版

    **JSF(JavaServer Faces)入门知识详解** JavaServer Faces(JSF)是Java平台上的一个用于构建Web应用程序的UI框架。它为开发者提供了一种声明式的方式来创建用户界面,简化了前端与后端之间的交互。JSF的核心概念...

Global site tag (gtag.js) - Google Analytics