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 閱讀(1298) 評論(0)  編輯  收藏 所屬分類: JSF

          導航

          統計

          常用鏈接

          留言簿(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
          主站蜘蛛池模板: 吴堡县| 资兴市| 德清县| 丹棱县| 临武县| 崇明县| 灵武市| 威海市| 军事| 闽侯县| 梧州市| 大竹县| 西城区| 玉龙| 津南区| 安图县| 许昌市| 涪陵区| 左贡县| 得荣县| 宜良县| 南丹县| 邵阳市| 辽宁省| 牡丹江市| 游戏| 静乐县| 长顺县| 嘉鱼县| 乐亭县| 荔浦县| 万荣县| 大英县| 大安市| 洪雅县| 轮台县| 阿拉善左旗| 兰州市| 灵丘县| 遂川县| 巴东县|