gembin

OSGi, Eclipse Equinox, ECF, Virgo, Gemini, Apache Felix, Karaf, Aires, Camel, Eclipse RCP

HBase, Hadoop, ZooKeeper, Cassandra

Flex4, AS3, Swiz framework, GraniteDS, BlazeDS etc.

There is nothing that software can't fix. Unfortunately, there is also nothing that software can't completely fuck up. That gap is called talent.

About Me

 

如何使用JSF FacesContext

在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请求所需的每个请求的状态信息。
 FacesContext实例及其封装的对象
 获取当前实例一个经常用到的方法是静态的getCurrentInstance方法,它返回当前的FacesContext实例。
此方法的签名如 下:public static FacesContext getCurrentInstance()

下面的代码是一个用此方法获取FacesContext当前实例的例子:
   FacesContext facesContext = FacesContext.getCurrentInstance();

 获取和修改组件树FacesContext实例里最重要的内容是请求页面的组件树。
        组件树是由javax.faces.tree.Tree类来表示的(本 章后面的“使用Tree类”一节会讨论)。
FacesContext实例的tree属性就是Tree对象。要获取或修改Tree对象,可使用tree属性 的读取方法和赋值方法:
           public abstract Tree getTree()public abstract void setTree(Tree tree)

添加和获取消息在请求处理生命周期里,可能会遇到错误。比如,当验证器执行输入验证时,因为用户输入了不正确的值,验证可能失败;当组件试图把输入值转换 为绑定到组件的模型对象所需的类型时,也可能会失败。
所有消息都必须存放到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对象。


添加和获取请求处理事件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时的顺序与其在队列中的顺序一致。

 向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)

获取和设置地区,JSF支持国际化和本地化。这意味着您可以根据用户的地区决定发送什么样的回应信息。
locale属性里存放了当前处 理中所用的Locale对象。初始状况下,locale属性的值和网络浏览器里指定的地区是一样的,但可以修改这个值,从而发送输出所使用的地区将独立于 浏览器所使用的地区。
此属性的读取方法和赋值方法如下:

      public abstract Locale getLocale()
      public abstract void setLocale(Locale locale)

操作请求处理生命周期FacesContext类还提供了两个方法与请求处理生命周期进行交互:
● 在当前阶段的处理完成后,调用renderResponse方法通知JSF实现把控制权转到呈现响应阶段。也就是说,处于当前阶段和呈现响应阶段之间的所 有其他阶段都不再执行。
● 调用responseComplete方法,告诉JSF实现此次请求的HTTP响应已经完成(比如在使用了HTTP重定向的情况下)。

因此,当前阶段完成 后,必须中止请求处理生命周期的处理。
这些方法的签名如下:
      public abstract void renderResponse()
     public abstract void responseComplete()

 获取其他请求状态信息其他每个请求的状态信息封装在ExternalContext对象里,可以使用getExternalContext方法获取该对 象:
           public abstract ExternalContext getExternalContext()ExternalContext放在下一节讨论。

posted on 2008-05-08 15:21 gembin 阅读(1289) 评论(0)  编辑  收藏 所属分类: JSF


只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问  
 

导航

统计

常用链接

留言簿(6)

随笔分类(440)

随笔档案(378)

文章档案(6)

新闻档案(1)

相册

收藏夹(9)

Adobe

Android

AS3

Blog-Links

Build

Design Pattern

Eclipse

Favorite Links

Flickr

Game Dev

HBase

Identity Management

IT resources

JEE

Language

OpenID

OSGi

SOA

Version Control

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜

free counters