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

JSF FacesContext 详解 三

阅读更多
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]);
}
}
3.3.7  获取请求头的名和值
getRequestHeaderMap方法返回一个包含当前请求中全部头名/值对的Map对象。其方法签名如下:
public abstract java.util.Map getRequestHeaderMap()
举个例子来说,下面的代码提取host头的值:
String host = null;
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Map headerMap = externalContext.getRequestHeaderMap();
if (headerMap!=null) {
host = (String) headerMap.get("host");
System.out.println(host);
}
注意:
报头的名称是不区分大小写的。比如,对getRequestHeaderMap返回的Map对象分别用host、Host和Host作为参数来调用get方法,其结果是一样的。
getRequestHeaderValuesMap方法与getRequestHeaderMap方法相似。但在getRequestHeader
ValuesMap方法返回的Map对象上调用get方法会得到一个字符串的数组。getRequestHeaderValuesMap方法的签名如下:
public abstract java.util.Map getRequestHeaderValuesMap()
在getRequestHeaderValuesMap方法返回的Map对象上调用get方法会返回一个java.util.Enumeration值。
下面的代码使用getRequestHeaderValuesMap方法来获取一个包含全部头名/值对的Map对象,然后在此Map对象上调用get方法以获取全部Accept-Encoding头的值,并将结果输出到控制台。
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Map headerValuesMap = externalContext.getRequestHeaderValuesMap();
if (headerValuesMap!=null) {
Enumeration headers =
(Enumeration) headerValuesMap.get("Accept-Encoding");
while (headers.hasMoreElements()) {
String value = (String) headers.nextElement();
System.out.println(value);
}
}
3.3.8  获取Cookie
getRequestCookies方法是HttpServletRequest.getCookies方法的包装器,它返回一个javax.servlet.http.Cookie对象的数组,数组中是当前Request对象里的全部Cookie。此方法的签名如下:
public abstract Cookie[] getRequestCookies()
例如,下面的代码取得当前请求中的全部Cookie对象,然后在结果数组上循环,输出全部Cookie的名和值。
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Cookie[] cookies = externalContext.getRequestCookies();
for (int i=0; i<cookies.length; i++) {
Cookie cookie = cookies[i];
String cookieName = cookie.getName();
String cookieValue = cookie.getValue();
System.out.println(cookieName + " : " + cookieValue);
}
getRequestCookieMap 方法返回一个包含当前请求中全部Cookie的、以Cookie的名称作为键的Map对象。在此Map对象上调用get方法会返回一个 javax.servlet.http.Cookie对象。GetRequestCookieMap方法的签名如下:
public abstract java.util.Map getRequestCookieMap()
例如,下面的代码取得名为password的Cookie对象并将其值输出到控制台。
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Map cookieMap = externalContext.getRequestCookieMap();
if (cookieMap!=null) {
Cookie cookie = (Cookie) cookieMap.get("password");
if (cookie!=null)
System.out.println("Value:" + cookie.getValue());
}
注意:
Cookie名称区分大小写。
3.3.9  获取场所
getRequestLocale方法是ServletRequest.getLocale方法的包装器,它返回Request对象中的Locale对象。此方法的签名如下:
public abstract java.util.Locale getRequestLocale()
例如,下面的代码取回用户的场所并输出该场所的显示语言和显示国家。
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Locale locale = externalContext.getRequestLocale();
System.out.println("Language:" + locale.getDisplayLanguage());
System.out.println("Country:" + locale.getDisplayCountry());
3.3.10  获取上下文路径
getRequestContextPath是HttpServletRequest.getContextPath方法的包装器,它返回请求URI中指明请求上下文的上下文路径部分。其方法签名如下:
public abstract String getRequestContextPath()
下面的代码段把请求URI的上下文路径输出到控制台:
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
System.out.println("Context path:" +
externalContext.getRequestContextPath());
对于URL http://localhost:8080/JSFCh03/faces/test.jsp来说,getRequestContextPath方法的返回值为/JSFCh03。
getRequestPathInfo 方法是HttpServletRequest.getPathInfo方法的包装器,它返回当客户端进行请求时与客户端发送的URL相关联的额外路径信 息。这部分信息跟在servlet路径信息的后面,但在查询字符串之前。getRequestPathInfo方法的签名如下:
public abstract String getRequestPathInfo()
例如,下面代码输出请求URL的路径信息。
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
System.out.println("Path info:" +
externalContext.getRequestPathInfo());
对于URL http://localhost:8080/JSFCh03/faces/test.jsp而言,getRequestPathInfo方法的返回值为test.jsp。
3.3.11  获取资源路径
getResourcePaths 方法是ServletContext类的getResourcePaths方法的包装器,它返回一个Set对象,其中包含Web应用中最长子路径与传入的 路径参数相匹配的资源路径。表示子目录的路径以“/”结束。返回的路径是相对于Web应用根路径的相对路径,并以“/”开始。此方法的签名如下:
public abstract java.util.Set getResourcePaths(String path)
比如,考虑如下代码:
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Set resourcePaths = externalContext.getResourcePaths("/");
Iterator iterator = resourcePaths.iterator();
while (iterator.hasNext()) {
String path = (String) iterator.next();
System.out.println(path);
}
System.out.println("----------------------------");
resourcePaths = externalContext.getResourcePaths("/WEB-INF");
iterator = resourcePaths.iterator();
while (iterator.hasNext()) {
String path = (String) iterator.next();
System.out.println(path);
}
这段代码两次调用了getResourcePaths方法,第一次传入“/”,第二次传入“/WEB-INF”。如果在一个目录结构如图3-2所示的Web应用里运行以上代码,则返回的第一个Set里包含如下路径:
/order.jsp
/index.jsp
/Styles.css
/images/
/details.jsp
/WEB-INF/
/checkOut.jsp
/browse.jsp
/shoppingCart.jsp
/search.jsp
/menu.jsp
第二个Set里包含如下路径:
/WEB-INF/faces-config.xml
/WEB-INF/web.xml
/WEB-INF/classes/
/WEB-INF/lib/

图3-2  测试getResourcesPath的目录结构
getResourceAsStream方法是ServletContext.getResourceAsStream的包装器,它返回指定路径中作为java.io.InputStream对象的资源。其方法签名如下:
public abstract java.io.InputStream getResourceAsStream(String path)
3.3.12  编码URL
encodeURL方法是HttpServletResponse.encodeURL方法的包装器,它编码给定的URL,其方法是加入会话的ID信息;或者,如果不需要这个步骤,则直接将给定的URL原封不动地返回。其方法签名如下:
public abstract String encodeURL(String url)
在portlet中使用JSF时,encodeActionURL和encodeResourceURL方法很有用。encodeActionURL迫使URL作为参数传递,造成动作在入口/portlet中起作用。这个方法的签名如下:
public abstract String encodeResourceURL(String sb)
encodeResourceURL方法迫使URL作为参数传递,引用资源以在入口/portlet中起作用。该方法造成URL需要根据包括的特定入口进行重定向。实际上,它简单地返回一个绝对URL。下面是encodeResourceURL方法的签名:
public abstract String encodeResourceURL(String sb)
3.3.13  分派请求
dispatchMessage方法可根据当前上下文分派请求。对servlet而言,它通过调用forward实现这一点;而对portlet而言,则是通过调用include方法实现这一点。此方法的签名如下:
public abstract void dispatchMessage(String requestURL)
throws java.io.IOException, FacesException
分享到:
评论

相关推荐

    JSF FacesContext 详解

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

    jsf1.2

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

    JSF实战(中英版)

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

    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和Spring集成.doc

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

    jsf 中文帮助文档

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

    JSF api,很详细,很全

    **JSF(JavaServer Faces)API详解** JSF(JavaServer Faces)是Java平台上的一个用于构建用户界面的MVC(Model-View-Controller)框架。这个框架的主要目的是简化Web应用开发,提供一种声明式的方式来处理用户交互...

    JSF API (有索引功能)

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

    jsf2+spring sample

    3. **FacesContext**:它是JSF2的核心,提供了与当前请求相关的上下文信息,包括请求参数、会话信息和视图状态。 4. **EL表达式**:JSF2支持统一的表达式语言(EL),用于在视图层与模型层之间绑定数据,方便页面与...

    《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生命周期学习文档

    【JSF生命周期详解】 JSF(JavaServer Faces)是一种基于Java的Web应用程序开发框架,它以组件为中心,简化了服务器端应用程序的用户界面构建。JSF的核心组成部分包括预定义的UI组件、事件驱动的编程模型以及支持第...

    jsf_in_action 英文版

    **JavaServer Faces (JSF) 技术详解** JavaServer Faces (JSF) 是一个用于构建用户界面的Java EE框架,特别适用于开发Web应用程序。它为开发者提供了模型-视图-控制器(MVC)架构的支持,简化了网页交互和业务逻辑...

    jsf-spring

    3. **FacesContext**:JSF框架的核心对象,它包含了处理当前HTTP请求所需的所有信息,如请求参数、视图状态、消息等。 4. ** Managed Beans**:JSF中的业务逻辑通常由Managed Beans实现,它们是JavaBeans的特殊版本...

Global site tag (gtag.js) - Google Analytics