- 浏览: 190990 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
刘一杰:
...
Database Link详解 -
chaomc:
...
Database Link详解 -
mz0827:
这玩意儿返回的是那个字段的list
hibernate去掉重复记录 -
kadan_james:
...
Database Link详解 -
moonights:
惭愧了 这个不是俺写的.......
有关JAVA的内存泄露的文章
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对象上调用一些方法获得的信息。
3.3.1 获取ServletContext、ServletRequest和ServletResponse对象
可使用下列方法获取servlet信息:
● getContext 此方法可获取Web应用中与当前请求相关联的ServletContext对象。其签名如下:
public abstract Object getContext()
● getRequest 此方法可获取代表当前正在处理的请求的ServletRequest对象。其签名如下:
public abstract Object getRequest()
● getResponse 此方法可获取代表当前正在呈现的响应的ServletResponse对象。其签名如下:
public abstract Object getResponse()
这些方法都是返回一个java.lang.Object对象,不是servlet特有的类型,这样就可以使JSF实现独立于其运行的环境。比如,JSF既可用于Web容器,也可以用于其他容器,如portlet等。
3.3.2 获取ServletContext特性
getApplicationMap方法返回一个包含ServletContext对象里全部特性名/值对的Map对象。下面是此方法的签名:
public abstract java.util.Map getApplication()
作为一个例子,下面的代码可获取一个名叫databaseUtility的特性:
Object contextAttribute = null;
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Map contextMap = externalContext.getApplicationMap();
if (contextMap!=null)
contextAttribute = contextMap.get("databaseUtility");
3.3.3 获取Session对象及其特性
通过ExternalContext对象可访问与当前请求相关联的Session对象。getSession方法可取回当前用户的javax.servlet.http.HttpSession对象,如果当前用户没有相应的Session对象,此方法的行为由传入的参数决定:如果为该方法传入了一个true值,它会创建一个Session对象;否则,它会返回null。下面是getSession方法的签名:
public abstract Object getSession(boolean create)
此方法其实是javax.servlet.http.HttpServletRequest接口中getSession方法的包装器。
getSessionMap方法返回一个包含与当前请求相关联的Session对象里所有特性名/值对的Map对象。下面是它的方法签名:
public abstract java.util.getSessionMap()
要获取Session对象里的特性,可调用Map类的get方法,传入要获取的特性名即可。文档中没有指明在当前请求没有相应Session对象的情况下,此方法是返回null还是一个空的Map对象。所以在调用Map的get方法之前,需要先检查Map是否为null。下面的代码是获取Session特性的例子:
Object sessionAttribute = null;
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Map sessionMap = externalContext.getSessionMap();
if (sessionMap!=null)
sessionAttribute = sessionMap.get(key);
最后一行的key是一个包含特性名的字符串。
3.3.4 获取ServletContext对象的初始参数
getInitParameter方法是ServletContext对象的getInitParameter方法的包装器,用这个方法可以提取在部署描述符(web.xml文件)里用context-init元素指定的初始参数值。此方法的签名如下:
public abstract String getInitParameter(String parameterName)
举例来说,如果在部署描述符声明了如下context-init元素:
<context-param>
<param-name>contactPerson</param-name>
<param-value>Scott Jobim</param-value>
</context-param>
下面代码中的字符串变量initParam的值会是Scott Jobim。
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
String initParam = externalContext.getInitParameter("contactPerson");
getInitParameterMap方法返回一个包含ServletContext对象中全部初始参数的Map对象。其签名如下:
public abstract java.util.Map getInitParameterMap()
为了获取一个初始参数的值,使用Map对象的get方法,同时传递初始参数的名称。比如,下面的代码把初始参数databaseName的值输出到控制台。
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Map paramMap = externalContext.getInitParameterMap();
if (paramMap!=null) {
System.out.println(paramMap.get("databaseName"));
}
3.3.5 获取Request对象的特性
getRequestMap方法返回一个包含当前Request对象中全部特性名/值对的Map对象。其方法签名如下:
public abstract java.util.Map getRequestMap()
作为一个例子,下面的代码可用来提取Request对象里的特性:
Object requestAttribute = null;
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Map requestMap = externalContext.getRequestMap();
if (requestMap!=null)
requestAttribute = requestMap.get(key);
最后一行里的Key是一个包含要提取的属性名的字符串。
3.3.6 访问Request对象里的参数名和值
getRequestParameterMap、getRequestParameterNames和getRequestParameterValuesMap方法可用来访问Request对象里的参数名和值。
getRequestParameterMap返回一个包含Request对象里全部参数名/值对的Map对象。其签名如下:
public abstract java.util.Map getRequestParameterMap()
作为一个例子,下面的代码可用来提取名为id的请求参数的值:
String id = null;
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Map requestParameterMap = externalContext.getRequestParameterMap();
if (requestParameterMap!=null)
id = (String) requestParameterMap.get("id");
getRequestParameterNames方法返回一个包含全部请求参数名的Iterator。此方法其实是ServletRequest.getParameterNames方法的包装器。不同的是,ExternalContext类的getRequestParameterNames返回一个Iterator,而不是java.util.Enumeration。此方法的签名如下:
public abstract java.util.Iterator getRequestParameterNames()
作为一个例子,下面的代码把所有的请求参数名/值对输出到控制台。
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Map requestParameterMap = externalContext.getRequestParameterMap();
Iterator parameterNames = externalContext.getRequestParameterNames();
while (parameterNames.hasNext()) {
String parameterName = (String) parameterNames.next();
String parameterValue =
(String) requestParameterMap.get(parameterName);
System.out.println(parameterName + " : " + parameterValue);
}
getRequestParameterValuesMap方法返回一个包含Request对象里全部参数名/值对的Map对象。此方法与getRequestParameterMap方法很相似,但getRequestParameterValuesMap可返回全部相同参数名的值。在此方法返回的Map对象上调用get(key)方法,这一点等同于获取当前请求的ServletRequest并在其上调用getParameterValues(key)。也就是说,Map对象返回的是一个字符串数组。GetRequestParameterValuesMap方法的签名如下:
public abstract java.util.Map getRequestParameterValuesMap()
下面例子中的代码把请求参数id的全部值输出到控制台。
String[] id = null;
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Map requestParameterValuesMap = externalContext.getRequestParameterValuesMap();
if (requestParameterValuesMap!=null) {
id = (String[]) requestParameterValuesMap.get("id");
// print all values of id
for (int i=0; i<id.length; i++) {
System.out.println(id[i]);
}
}
发表评论
-
Android推送服务器
2014-11-02 18:03 437NIO实现的 Socket底层数据传输框架 参考了mi ... -
修改配置文件动态生效
2013-01-23 15:05 1127在我们的应用中,会经常性的修改配置文件,但是往往web应 ... -
桶排序
2012-04-06 08:53 1051优点:一种十分巧妙的排序方式,排序速度也很快。 缺点:排序是 ... -
一个惯性思维出现的错误-有点意思
2011-11-22 16:52 1954很久没有积累东西了,碰巧前几天遇到一个的问题,虽然不大但是比较 ... -
知识积累—Java内存泄露问题分析(转)
2011-06-29 10:35 984个人转载的一篇文章,可以对内存泄露的问题理解多一些,其中标红的 ... -
有关JAVA的内存泄露的文章
2011-06-29 10:34 1595Java的一个重要优点就是通过垃圾收集器GC (Garbag ... -
proxool连接池监听配置
2011-06-27 14:36 1415连接池监听<servlet> <servl ... -
Java NIO原理和使用
2011-02-18 13:32 888Java NIO原理和 ... -
java 栈和堆的比较
2011-02-18 13:22 647From : http://www.j2medev ... -
问题积累—解决Windows不能在本地计算机启动apache tomcat
2010-07-03 11:48 2315错误描述:在windows下以服务的方式启动时提示如下: “w ... -
收藏整理—常用正则表达式
2010-06-01 14:41 6211。^\d+$ //匹配非负整数(正整数 + 0) 2。 ... -
递归删除目录和文件
2010-06-01 11:17 845import java.io.*; ... -
批量下载魔兽replays录像文件
2010-02-24 13:45 1783自己是个war3爱好者,也经常去浩方或者VS平台去打 ... -
java实现基于http协议的网络文件下载
2010-01-26 13:50 15121.HTTP协议工作方式 基于HTTP协议的客户/服务 ... -
java.net.URL的URL构建方式
2010-01-26 13:47 1632认识IP、认识URL是进行网络编程的第一步。java.net. ... -
Java中的几个术语的解释与关系
2010-01-07 15:54 729java的几种对象(PO,VO,DAO,BO,POJO)解释 ... -
JAVA 中URL链接中文参数乱码的处理方法
2010-01-07 09:11 1032JAVA 中URL链接中文参数乱码的若干处理方法,现在整理收录 ... -
怎样用Java来获取真实的IP地址
2009-08-06 10:10 979在JSP里,获取客户端的IP地址的方法是:reque ... -
java实现外部调用exe文件
2009-07-31 12:35 805package com.moonights.tools; / ... -
java实现MD5加密算法
2009-07-30 08:44 1069package com.moonights.tools; ...
相关推荐
JSF FacesContext 详解 FacesContext 是 JSF 框架中一个核心组件,它负责管理 JSF 请求的状态信息。在 Faces API 中,FacesContext 和 ExternalContext 是两个经常使用的类,本文将详细介绍 FacesContext 的编程...
总的来说,JSF中文帮助文档涵盖了JSF框架的所有关键概念和技术,包括API详解、生命周期、组件使用、数据绑定、验证、导航等,对于希望在Java Web开发中使用JSF的开发者来说,是极具价值的学习资源。通过阅读和实践,...
**JSF API 知识点详解** JSF (JavaServer Faces) 是Java平台上的一个用于构建Web用户界面的MVC(Model-View-Controller)框架。它为开发人员提供了一种简单而强大的方式来创建动态、数据驱动的Web应用程序。在JSF中...
3. **FacesContext**:JSF框架中的关键对象,它是与当前请求相关的上下文,包含了请求、响应、组件树、消息和配置信息。 4. **Managed Beans**:JSF 1.2引入了Managed Beans,这是业务逻辑层的主要组件。它们是简单...
5. **FacesContext**:作为JSF的核心对象,FacesContext包含了当前请求的所有上下文信息,包括请求参数、响应头、视图状态等。JSF 1.2对其进行了增强,提供更多的方法来访问和操作这些信息。 ### JSF 1.2 的新特性 ...
- FacesContext是JSF的核心上下文对象,它包含了当前请求的所有信息,是组件、监听器和转换器之间通信的桥梁。 - Managed Beans是JSF中的业务逻辑载体,它们通过注解如`@ManagedBean`和`@SessionScoped`来定义范围...
### JSF与Spring集成知识点详解 #### 一、概述 **JSF (JavaServer Faces)** 和 **Spring** 都是目前广泛使用的Java Web开发框架。JSF 是一个用于构建基于 Java 的 Web 应用程序的标准组件框架,而 Spring 框架则是...
**JSF 1.2 源代码详解** JavaServer Faces (JSF) 是一个用于构建用户界面的Java EE框架,它提供了一种组件化的方式来创建Web应用程序。JSF 1.2是该框架的一个重要版本,发布于2007年,带来了许多增强功能和改进,...
3. **ManagedBean**: 这是JSF中的业务对象,可以通过EL(Expression Language)在视图层直接访问,用于存储和处理数据。 4. **EL**: 提供了在视图和模型之间传递数据的方式,允许开发者在JSP或Facelets页面中直接...
**JSF 2.2 基本jar包详解** JavaServer Faces (JSF) 是Java平台上的一个标准的用户界面框架,用于构建Web应用程序。JSF 2.2是其一个重要的版本,提供了许多增强的功能和改进。在这个场景中,我们关注的是JSF 2.2...
- **更新模型值(Update Model Values)**:在这个阶段,JSF框架会将前端组件中的值更新到后端模型对象(例如,Bean)中。 - **调用应用程序(Invoke Application)**:在此阶段,JSF框架会处理所有的Action事件,...
【JSF2与Spring整合详解】 JavaServer Faces 2(简称JSF2)是Java平台上的一个企业级的用户界面框架,它为构建基于Web的应用程序提供了组件化、事件驱动的模型。而Spring框架则是Java后端开发的核心框架,以其依赖...
2. **FacesContext**:JSF的核心上下文对象,用于存储请求数据、处理事件和通信。 3. **Managed Beans**:JSF的业务逻辑组件,与ActionForm类似,但更易于管理。 4. **Facelets**:JSF的默认视图技术,允许使用XML...
**JSF 1.2.07 源代码详解** JavaServer Faces (JSF) 是Java平台上用于构建用户界面的官方标准框架,它提供了一种声明式的方式来创建Web应用程序。JSF 1.2是该框架的一个重要版本,引入了许多增强功能和改进,为...
10. **FacesContext**: FacesContext是JSF中一个重要的上下文对象,它提供了对当前请求的所有信息,包括用户请求、响应、会话和应用程序范围的数据。 通过阅读"JSF in Action",读者不仅能够掌握JSF的基本用法,还...
**JSF 1.2 新特性详解** JavaServer Faces (JSF) 是Java平台上用于构建Web应用程序的一种组件模型。JSF 1.2是该框架的一个重要版本,它引入了一系列新特性和改进,提升了开发效率和用户体验。以下是对JSF 1.2新特性...
**JSF API(JavaServer Faces Application Programming Interface)详解** JSF,全称为JavaServer Faces,是Java EE平台上的一个标准用户界面组件模型和事件处理框架。它为开发Web应用程序提供了一种模型-视图-控制...
6. **FacesContext**:这是JSF框架的核心上下文对象,它在请求处理期间存储所有相关信息,如请求参数、视图状态等。 7. **导航规则**:JSF的导航规则决定了用户操作后的页面跳转,可以通过配置文件或在代码中动态...
FacesContext是JSF框架中的核心上下文对象,它提供了对当前请求的访问,包括获取请求参数、发送响应消息、访问bean等。它是连接组件、bean和应用程序其他部分的桥梁。 9. **国际化与本地化**: JSF支持多语言环境...