<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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中有兩個類是要經(jīng)常使用的. 一個是FacesContext 一個是ExternalContext, 本篇文章講解如何使用前者, 在下面的一篇文章中在繼續(xù)講解任何使用后者:

    對每個JSF請求,F(xiàn)acesServlet對象都會為其獲取一個javax.faces. context. FacesContext類的實例。
    FacesServlet對象將下列3個取自Web容器的對象傳給javax.faces.context.FacesContextFactory對象的getFacesContext方法,以此來做到這一點:

    ● javax.servlet.ServletContext
    ● javax.servlet.ServletRequest
    ● javax.servlet.ServletResponse
    這意味著FacesContext的實例里包含了所有處理JSF請求所需的每個請求的狀態(tài)信息。
     FacesContext實例及其封裝的對象
     獲取當(dāng)前實例一個經(jīng)常用到的方法是靜態(tài)的getCurrentInstance方法,它返回當(dāng)前的FacesContext實例。
    此方法的簽名如 下:public static FacesContext getCurrentInstance()

    下面的代碼是一個用此方法獲取FacesContext當(dāng)前實例的例子:
       FacesContext facesContext = FacesContext.getCurrentInstance();

     獲取和修改組件樹FacesContext實例里最重要的內(nèi)容是請求頁面的組件樹。
            組件樹是由javax.faces.tree.Tree類來表示的(本 章后面的“使用Tree類”一節(jié)會討論)。
    FacesContext實例的tree屬性就是Tree對象。要獲取或修改Tree對象,可使用tree屬性 的讀取方法和賦值方法:
               public abstract Tree getTree()public abstract void setTree(Tree tree)

    添加和獲取消息在請求處理生命周期里,可能會遇到錯誤。比如,當(dāng)驗證器執(zhí)行輸入驗證時,因為用戶輸入了不正確的值,驗證可能失敗;當(dāng)組件試圖把輸入值轉(zhuǎn)換 為綁定到組件的模型對象所需的類型時,也可能會失敗。
    所有消息都必須存放到FacesContext實例里以備后面進行處理。比如,您可能希望在頁面里顯 示錯誤消息,從而為用戶更正錯誤提供幫助。
    錯誤消息是由javax.faces.application.Message接口(第11章再詳細討論)來表 示的,您可以通過使用FacesContext類的addMessage方法向FacesContext實例里添加Message對象。

         這個方法的簽名如 下:public abstract void addMessage(UIComponent component, Message message)

    如果component不為空,新加入的message就關(guān)聯(lián)到component上。否則,它就不與任何特定組件的實例相關(guān)。舉例來 說,驗證器在驗證組件值失敗時可調(diào)用FacesContext的addMessage方法,傳入值無效的組件及一個包含特定錯誤消息的Message對 象。

    所有添加到FacesContext實例的Message對象都被加入到一個集合里。
    可通過調(diào)用getMessages方法的兩個重載方法之一來獲取 加入的Message對象:
             public abstract Iterator getMessages()
             public abstract Iterator getMessages(UIComponent component)
    第一種形式的調(diào)用在一個Iterator里返回所有Message對象,
    第二種形式的調(diào)用則僅返回與給定UIComponent相 關(guān)聯(lián)的Message對象。


    添加和獲取請求處理事件UIComponent可以生成FacesEvent對象。
          比如,當(dāng)單擊一個UICommand組件時,它會生成一個 ActionEvent對象(ActionEvent類是FacesEvent類的子類)。
         這個FacesEvent對象需要在FacesContext 實例里保存起來,以備請求處理生命周期里的下一步處理事件時所用。
         可通過使用FacesContext類的addFacesEvent方法向 FacesContext實例添加FacesEvent對象。

         此方法的簽名如下:public abstract void addFacesEvent(FacesEvent event)

         要提取先前添加的FacesEvent對象,可調(diào)用getFacesEvents方法,
         其簽名如下:public abstract Iterator getFacesEvents()
        此方法返回FacesEvent時的順序與其在隊列中的順序一致。

     向Response對象里寫入信息為了向Response對象里寫入信息,F(xiàn)acesContext類提供了兩個屬性,
    一個是 javax.faces.Context.ResponseStream類型,
    另一個是 javax.faces.context.ResponseWriter類型。

    ResponseStream類型的對象用于輸出二進制數(shù)據(jù),而 ResponseWriter類型的對象則用于輸出字符。
    這些屬性的讀取方法和賦值方法如下:
             public abstract ResponseStream getResponseStream()
             public abstract void setResponseStream(ResponseStream responseStream)
             public abstract ResponseWriter getResponseWriter()
            public abstract void setResponseWriter(ResponseWriter responseWriter)

    獲取和設(shè)置地區(qū),JSF支持國際化和本地化。這意味著您可以根據(jù)用戶的地區(qū)決定發(fā)送什么樣的回應(yīng)信息。
    locale屬性里存放了當(dāng)前處 理中所用的Locale對象。初始狀況下,locale屬性的值和網(wǎng)絡(luò)瀏覽器里指定的地區(qū)是一樣的,但可以修改這個值,從而發(fā)送輸出所使用的地區(qū)將獨立于 瀏覽器所使用的地區(qū)。
    此屬性的讀取方法和賦值方法如下:

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

    操作請求處理生命周期FacesContext類還提供了兩個方法與請求處理生命周期進行交互:
    ● 在當(dāng)前階段的處理完成后,調(diào)用renderResponse方法通知JSF實現(xiàn)把控制權(quán)轉(zhuǎn)到呈現(xiàn)響應(yīng)階段。也就是說,處于當(dāng)前階段和呈現(xiàn)響應(yīng)階段之間的所 有其他階段都不再執(zhí)行。
    ● 調(diào)用responseComplete方法,告訴JSF實現(xiàn)此次請求的HTTP響應(yīng)已經(jīng)完成(比如在使用了HTTP重定向的情況下)。

    因此,當(dāng)前階段完成 后,必須中止請求處理生命周期的處理。
    這些方法的簽名如下:
          public abstract void renderResponse()
         public abstract void responseComplete()

     獲取其他請求狀態(tài)信息其他每個請求的狀態(tài)信息封裝在ExternalContext對象里,可以使用getExternalContext方法獲取該對 象:
               public abstract ExternalContext getExternalContext()ExternalContext放在下一節(jié)討論。

    posted on 2008-05-08 15:21 gembin 閱讀(1301) 評論(0)  編輯  收藏 所屬分類: JSF

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿(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
    主站蜘蛛池模板: 9久9久女女免费精品视频在线观看| 一级日本高清视频免费观看| 亚洲成av人片不卡无码| 亚洲第一成年男人的天堂| 亚洲产国偷V产偷V自拍色戒| 久久亚洲高清观看| 久久久亚洲精品国产| 亚洲国产人成在线观看69网站| 亚洲av激情无码专区在线播放| 亚洲处破女AV日韩精品| 亚洲国产精品久久久久婷婷老年| 西西人体44rt高清亚洲| 亚洲美女视频一区| 亚洲一区二区三区91| 亚洲熟妇AV乱码在线观看| 狠狠入ady亚洲精品| 无码精品人妻一区二区三区免费| 日韩久久无码免费毛片软件| 一级毛片免费毛片毛片| 久久国产精品免费| 99国产精品免费视频观看| 无码国产精品一区二区免费虚拟VR| 24小时日本在线www免费的| 日本最新免费不卡二区在线| 亚洲Av无码乱码在线观看性色 | 日韩免费电影网站| 6080午夜一级毛片免费看6080夜福利| 国产免费不卡视频| 日韩一区二区三区免费体验| 亚洲裸男gv网站| 亚洲一区二区电影| 亚洲人成人网站18禁| eeuss免费影院| 免费国产黄网站在线观看| 成人黄页网站免费观看大全| 亚洲高清无码在线观看| 亚洲av无码国产精品色午夜字幕| 亚洲伊人久久大香线蕉结合| 免费国产va视频永久在线观看| 老司机69精品成免费视频| 啦啦啦中文在线观看电视剧免费版 |