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

JSF如何使用ExternalContext类 1

阅读更多
使用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]);
    }
}


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);
    }
}


分享到:
评论

相关推荐

    JSF如何使用ExternalContext类

    本文将详细讲解如何在JSF中使用`ExternalContext`类。 首先,`ExternalContext`类主要提供了以下三种方法来获取Servlet环境中的核心对象: 1. **获取ServletContext对象**: - `getContext()`方法返回与当前请求...

    jsf 实例 登录 helloword

    4. 登录成功后,可以使用`FacesContext`的`externalContext()`方法重定向用户: ```java FacesContext context = FacesContext.getCurrentInstance(); context.getExternalContext().redirect("success.xhtml"); ```...

    JSF登录视频教程及代码

    1. **JSF组件库**:JSF框架包含多个组件库,如PrimeFaces、RichFaces等,它们提供了丰富的UI组件,包括登录表单所需的输入字段和按钮。在本教程中,你可能将学习如何使用这些组件来构建登录界面。 2. **登录表单**...

    jsf 详细 原理介绍 内容讲解

    1. **JSF架构**: JSF的架构围绕组件模型、事件模型和请求处理生命周期展开。核心API包括多个包,如`javax.faces`、`javax.faces.application`、`javax.faces.component`等,它们提供了框架的基础构建块。 2. **...

    JSF的一个实例

    总的来说,JSF实例“UserLogin”展示了如何使用JSF组件和生命周期来处理用户登录和信息查询。它涉及到视图的创建、用户输入的处理和验证、业务逻辑的执行,以及数据的持久化和展示。通过这样的实例,开发者可以深入...

    JSF精美登陆跳转,自定义数据验证

    - **页面跳转**:登录成功后,JSF可以通过导航规则(Navigation Case)或`FacesContext`的`externalContext.redirect()`方法将用户重定向到其他页面。例如,登录成功后,用户可能被定向到主页面或个人中心。 **2. ...

    JSF参数传递doc

    1. **使用 `&lt;f:param&gt;` 标签传递参数**: 这是最基础的传递参数方式,常用于链接或按钮的点击事件。在JSF页面中,你可以通过`&lt;f:param&gt;`标签在`&lt;h:commandLink&gt;`或`&lt;h:commandButton&gt;`内定义参数。例如: ```xml ...

    JSF文件上传下载

    1. **前端页面(JSF Facelet)**:在这里,我们需要定义`&lt;h:inputFile&gt;`组件,可能还需要一个提交按钮。例如: ```html 上传" action="#{fileUploadBean.upload}" /&gt; ``` 这里的`fileUploadBean`是后台bean,`...

    JSF FacesContext 详解

    在 Faces API 中,FacesContext 和 ExternalContext 是两个经常使用的类,本文将详细介绍 FacesContext 的编程接口和使用方法。 FacesContext 的实例是在 FacesServlet 对象中创建的,每个 JSF 请求都会获取一个 ...

    jsf【静态】页面的三级级联示例

    在`faces-config.xml`文件中定义导航规则,或者在bean中使用`ExternalContext`进行导航。 8. **响应式设计**:确保你的页面在不同设备和屏幕尺寸上都能正常显示,可能需要应用CSS样式和媒体查询。 9. **测试与调试...

    jsf几个常用取值方法和技巧总结

    对于JSF 1.2版本,可以使用Application对象的evaluateValueExpressionGet()方法直接评估EL表达式,并强制转换为指定类型。 值得注意的是,第3种方法在JSF 1.1中并不适用,因为它不包含evaluateValueExpressionGet...

    jsf框架和国际化

    1. **JSF框架概述** JSF是一种MVC(Model-View-Controller)架构的框架,用于创建交互式的Web应用程序。它将用户界面组件与后端业务逻辑分离开来,提供了一种声明式编程方式,降低了开发复杂性。JSF组件库包含许多...

    JSF如何监测和处理session超时

    此外,你可以考虑使用JSF的`&lt;f:viewAction&gt;`或自定义的组件行为来在页面加载时检测会话状态,从而提供更即时的反馈。 总结来说,通过创建一个监听恢复视图阶段的`PhaseListener`,并捕获`ViewExpiredException`,...

    java server face重定向

    1. 使用`ExternalContext.redirect()`方法: 在JSF中,我们可以直接在Managed Bean的方法中使用`FacesContext`的`getExternalContext()`来实现重定向。以下是一个例子: ```java import javax.faces.context....

    UIUtil.rar_Java编程_Java_

    使用UIUtil类,开发者可以更方便地在JSF应用程序中访问Servlet环境变量,例如: ```java String initParamValue = UIUtil.getServletContext().getInitParameter("myInitParam"); ``` 这比直接通过FacesContext的...

    jasperReport学习资料

    3. **JSF(JavaServer Faces)**:通过FacesContext和ExternalContext与JasperReport交互。 **五、JasperReport高级特性** 1. **表达式(Expressions)**:在报表设计中使用Java表达式动态计算值。 2. **样式和...

    domino xpages 文档开发 打開跳轉頁面

    8. **外部环境交互**: `javax.faces.context.ExternalContext`对象在JavaServer Faces (JSF) 应用程序中提供对应用服务器环境的访问。`extCont.redirect(url)`方法用于服务器端的URL重定向。 9. **在新窗口打开链接...

    netbeans重定向

    在这段代码中,我们首先获取了当前的`FacesContext`对象,然后通过`ExternalContext`获取到了`HttpServletResponse`对象。接下来,我们调用了`sendRedirect`方法,并传入了目标URL。最后,调用了`responseComplete`...

    domino xpages 文档状态改变.

    1. **XPages基础**: - XPages是IBM Lotus Domino的一种富互联网应用程序(RIA)开发框架,允许开发者创建基于Web的动态用户界面,类似于传统的Lotus Notes客户端体验。 - XPages构建在JavaServer Faces (JSF) ...

    spring webflow reference,

    - **externalContext**:外部上下文。 #### 渲染视图 Spring Web Flow支持多种视图技术,包括但不限于: - **JSP**:Java Server Pages。 - **Freemarker**:Freemarker模板引擎。 - **Thymeleaf**:...

Global site tag (gtag.js) - Google Analytics