注:本文来自互联网http://blog.sina.com.cn/s/blog_56000153010006la.html
在Faces API中有两个类是要经常使用的. 一个是FacesContext 一个是ExternalContext, 本篇文章讲解如何使用前者, 在下面的一篇文章中在继续讲解任何使用后者:
对每个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()
分享到:
相关推荐
jsf的facesContext上下文工具类
JSF FacesContext 详解 FacesContext 是 JSF 框架中一个核心组件,它负责管理 JSF 请求的状态信息。在 Faces API 中,FacesContext 和 ExternalContext 是两个经常使用的类,本文将详细介绍 FacesContext 的编程...
此外,JSF还使用Factory Method模式来创建FacesContext实例,这是通过FacesContextFactory实现的。FacesContextFactory提供了一个getFacesContext方法,该方法由JSF实现来创建FacesContext实例。 ##### 3.4 State...
本教程将带你深入了解JSF的基础使用,包括框架的引入、用户登录实现、自定义表单验证以及通过`valueChangeEvent`处理级联下拉框。 **一、JSF框架的引入** 在Java EE项目中引入JSF框架,首先需要在`pom.xml`或`build...
2. **使用JSF的FacesContext**:在JSF中访问请求参数和执行跳转操作。 3. **错误和异常处理**:合理配置Spring的异常处理器,结合JSF的错误展示机制,提供友好的用户反馈。 4. **性能优化**:合理使用JSF的缓存机制...
`jsf-api-2.0.3.jar` 包含的API接口定义了JSF的各种核心接口,例如`FacesContext`、`UIComponent`、`ManagedBean`等,这些都是构建JSF应用程序的基础。开发者可以引用这些接口来创建自定义组件,实现事件监听器,...
5. **FacesContext**: 是JSF框架的核心上下文对象,它存储了请求处理过程中的所有信息,包括用户请求、响应、组件树等。 6. **Lifecycle**: JSF有自己的一套生命周期,包括初始化、恢复视图、应用请求值、处理事件...
例如,`javax.faces.context.FacesContext`的实现就包含在这里,它是JSF处理请求和响应的核心类,提供了对当前FacesContext的各种操作。 在JSF开发中,这两个JAR文件通常需要被添加到项目的类路径中,以便运行时...
API提供了如`UIComponent`、`FacesContext`、`PhaseListener`等核心组件和上下文对象,它们构成了JSF生命周期的基础。开发者可以使用这些接口来创建自定义组件,实现监听器,以及处理请求和响应。 ### 2. `jsf-ri` ...
JSF提供了`FacesContext`对象来操作session。 6. **邮箱验证**:提到"通过邮件进行获得密码",可能涉及到密码找回功能。系统可能会发送带有验证链接的邮件到用户的注册邮箱,用户点击链接后可以重置密码。这需要...
开发者在编写JSF应用程序时,主要会引用这个API,它定义了诸如FacesContext、UIComponent、ValueExpression等核心组件和接口。通过这些API,开发者可以创建自定义组件,处理事件,以及与模型和视图进行交互。 2. **...
9. **实用工具和扩展**:可能涵盖一些JSF的实用工具类,如FacesContext,以及如何使用Mojarra和MyFaces等不同实现库的扩展功能。 通过深入学习和实践这些内容,你将能够从零基础逐渐掌握JSF的使用,为构建高效、可...
JSF(JavaServer Faces)是Java平台上用于构建Web应用程序的...记住,JSF的强大之处在于它的灵活性和可扩展性,可以根据项目需求进行定制和优化。在实际开发中,还可能涉及国际化、权限控制、异常处理等更多高级特性。
- JSF使用Facelets作为默认的视图描述语言,允许开发者使用XML或XHTML来创建动态页面。 - 视图导航是通过faces-config.xml文件或编程方式实现的,控制着用户请求后的跳转流程。 7. **Ajax支持** - JSF 2.0引入了...
**FacesContext** 是JSF的核心上下文对象,它在整个JSF生命周期中充当了组件、bean和其他服务之间的通信桥梁。 **导航** 在JSF中是通过配置文件(faces-config.xml)或编程方式实现的,决定了根据用户的操作如何...
5. **FacesContext**:它是JSF应用的核心对象,提供当前请求的相关信息,包括请求参数、消息、视图状态等。 6. **Managed Beans**:JSF中的业务逻辑通常封装在Managed Beans中,它们是Java类,可以通过EL表达式在视...
同时,JSF提供了一系列JSP标签库,如`h:`和`f:`,简化了组件的使用和事件处理。 **8. JSF的扩展性** JSF API设计得非常灵活,允许第三方提供者创建自定义组件、渲染器、转换器和验证器。这使得JSF能够适应各种不同...
`jsf-api.jar`包含了JSF框架的核心API,开发者可以使用这些API来创建JSF组件、定义事件处理、管理bean属性等。这个库提供了JSF的核心接口和抽象类,包括但不限于: - `javax.faces.application.Application`:负责...
**JSF API** 包括了JSF的框架类、接口和辅助工具,例如`FacesContext`、`UIComponent`、`ManagedBean`等。这些API使得开发者能够控制页面的生命周期,管理组件状态,处理请求和响应,以及执行后端业务逻辑。 1. **...