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

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

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

    征服jsf

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      6 隨筆 :: 0 文章 :: 27 評(píng)論 :: 0 Trackbacks

    UIComponent實(shí)現(xiàn)了StateHolder接口,StateHolder接口表示組件具有了狀態(tài)。
    StateHolder接口中常用到saveState,restoreState兩個(gè)方法,在開(kāi)發(fā)自定義組件的時(shí)候,需要實(shí)現(xiàn)它們,具體使用上經(jīng)常是把你的組件中全局變量進(jìn)行狀態(tài)化,就是在Object[]中定義它們,jsf在恢復(fù)和保存兩個(gè)階段分別調(diào)用組件的這兩個(gè)方法,把頁(yè)面的狀態(tài)數(shù)據(jù)恢復(fù)在Object[],把組件的Object[]數(shù)據(jù)渲染到頁(yè)面。isTransient,setTransient方法表式,你的組件是否想狀態(tài)化。

    UIComponent組件主要api
    1.public abstract java.util.Map getAttributes()  該方法會(huì)獲得該組件的所有屬性值

    2. public abstract javax.faces.el.ValueBinding getValueBinding(java.lang.String name) 該方法會(huì)從組件的值綁定集合表中獲取對(duì)應(yīng)的值綁定對(duì)象,值綁定對(duì)象(ValueBinding )的目的是使用EL表達(dá)式解析你綁定的模型值,例如頁(yè)面有個(gè)(#use.name),那么值綁定就會(huì)解析這個(gè)字符串,通過(guò)變量解析獲取User對(duì)象,再用值解析獲取name值。

    3.public abstract java.lang.String getClientId(javax.faces.context.FacesContext context) 主要是在UIViewRoot組件中生成組件在頁(yè)面的映射Id,如果你為組件定義了一個(gè)id,那么他會(huì)基于這個(gè)id生成一個(gè)具有組件層次的客戶端Id,使用':'來(lái)分隔,如果沒(méi)有為組件定義id,那么會(huì)動(dòng)態(tài)生成一個(gè)id,例如會(huì)在頁(yè)面渲染結(jié)果看到'form1:input1'這樣的Id,就是告訴你一個(gè)Input組件的id是'input',它在id是'form1'的form組件中。clientId常常在jsf內(nèi)部對(duì)組件用來(lái)整理,定位。

     4.public abstract java.lang.String getFamily() 告訴你這個(gè)組件屬于那個(gè)家族的,用的不多。主要是內(nèi)部創(chuàng)建渲染類使用。

    5. public abstract java.lang.String getId() 這個(gè)Id就是頁(yè)面上你指定的組件Id,它可以讓你方便的查找組件樹(shù)上的組件,最好給你的頁(yè)面組件都設(shè)定一個(gè)id,在服務(wù)端開(kāi)發(fā)有時(shí)候會(huì)用到,如果沒(méi)有設(shè)定,jsf會(huì)自動(dòng)生成一個(gè)唯一的id,如果自定義id在組件中有沖突,那么jsf會(huì)拋出id沖突異常。

    6.public abstract javax.faces.component.UIComponent getParent() 得到該組件的父組件,注意:html標(biāo)記不會(huì)成為一個(gè)組件。

    7. public abstract boolean isRendered() 如果該組件這個(gè)方法設(shè)定為false,那么該組件以及它的子組件都會(huì)停止解碼,驗(yàn)證,值更新,渲染等操作

    8. public abstract java.lang.String getRendererType()  指定了該組件使用哪個(gè)渲染類進(jìn)行渲染,這就是組件與渲染分離,并且互相可以復(fù)用的機(jī)制。

    9. public abstract boolean getRendersChildren();  如果組件的此方法設(shè)定為真,那么jsf將繼續(xù)尋找它的子組件進(jìn)行渲染。否者渲染只渲染到當(dāng)前組件。

    10. public abstract java.util.List getChildren(); 獲得該組件的直屬子組件列表

    11. public abstract int getChildCount() 獲得獲得該組件的直屬子組件列表數(shù)

    12.public abstract javax.faces.component.UIComponent findComponent(java.lang.String expr) 尋找該組件的子組件,通過(guò)頁(yè)面上指定的組件Id,在它的父組件的findComponent去查找這個(gè)組件,一般用于自定義組件開(kāi)發(fā)上,例如:jsf消息渲染的時(shí)候就是通過(guò)findComponent方法去尋找for屬性定義的組件。

    13.public abstract java.util.Map getFacets() 得到該組件的所有facet類型的組件,facet組件主要作用:一個(gè)功能強(qiáng)大的組件中會(huì)有很多增強(qiáng)功能,這些增強(qiáng)功能可以定義成多個(gè)小的facet組件,這樣可以從組件的主功能中分解開(kāi),降低組件內(nèi)部功能的耦合性,同時(shí)也可以做為組件的插件機(jī)制來(lái)擴(kuò)展。

    14.public abstract java.util.Iterator getFacetsAndChildren() 獲取自己所以的直屬子組件和facet組件,常用在子組件查找操作上,例如jsf核心機(jī)制中,遍歷組件增加事件時(shí)就要遞歸使用此方法。

    15.    public abstract void broadcast(javax.faces.event.FacesEvent event) 對(duì)于jsf生命周期的幾個(gè)階段都會(huì)用到遞歸遍歷組件的事件,使用的就是這個(gè)方法,常用在內(nèi)部機(jī)制上。標(biāo)準(zhǔn)的觀察者模式。

    16.    public abstract void decode(javax.faces.context.FacesContext context) jsf聲明周期中的解碼部分就是調(diào)用此方法,主要用在應(yīng)用請(qǐng)求值階段,通過(guò)遞歸遍歷,每一個(gè)組件會(huì)在這個(gè)階段操作request等容器對(duì)象來(lái)實(shí)現(xiàn)并隱藏request請(qǐng)求的表現(xiàn)邏輯,并封裝成事件交給組件的事件列表,由后面的階段來(lái)處理。需要注意的是很可能此方法會(huì)把工作委托給渲染類的decode上,所以jsf的渲染機(jī)制不僅僅是簡(jiǎn)單的輸出html等展現(xiàn)標(biāo)記,還用來(lái)封裝和隱藏容器內(nèi)的通信機(jī)制,讓容器內(nèi)對(duì)象從我們眼前消失!

    17. 

        public abstract void encodeBegin(javax.faces.context.FacesContext context)
                throws java.io.IOException;

        public abstract void encodeChildren(javax.faces.context.FacesContext context)
                throws java.io.IOException;

        public abstract void encodeEnd(javax.faces.context.FacesContext context)
                throws java.io.IOException;

    組件渲染階段需要經(jīng)歷的步驟,渲染機(jī)制是一個(gè)復(fù)雜的過(guò)程,原理上是把tag標(biāo)記渲染的工作委托給了servlet之上來(lái)處理,jsf 的tag標(biāo)記只作為組件,視圖之間的映射之用。這三個(gè)階段更明確了渲染成視圖標(biāo)記這樣一個(gè)工作,同樣可以委托給渲染類去做。

     18.protected abstract void addFacesListener(javax.faces.event.FacesListener listener) 為組件增加監(jiān)聽(tīng),標(biāo)準(zhǔn)的觀察者模式。

    19.protected abstract javax.faces.event.FacesListener[] getFacesListeners(java.lang.Class clazz) 得到組件的監(jiān)聽(tīng)列表,監(jiān)聽(tīng)器在組件的事件列表遍歷時(shí)會(huì)被調(diào)用,clazz參數(shù)是用來(lái)區(qū)分不同的監(jiān)聽(tīng)器,目前常用ActionListener.class,ValueChangeListener.class

    20.protected abstract void removeFacesListener(javax.faces.event.FacesListener listener);從組件的監(jiān)聽(tīng)列表中刪除不需要的監(jiān)聽(tīng)器。

    21.public abstract void queueEvent(javax.faces.event.FacesEvent event) 把新創(chuàng)建的事件增加到組件的事件隊(duì)列,此方法常常用在應(yīng)用請(qǐng)求值階段,每個(gè)組件會(huì)根據(jù)條件創(chuàng)建自己的事件,加入到事件列表,所有事件會(huì)全局的放入U(xiǎn)IViewRoot組件中,UIViewRoot組件是jsf各個(gè)階段對(duì)組件樹(shù)進(jìn)行遞歸遍歷處理的啟動(dòng)點(diǎn)。

    22.

       public abstract void processRestoreState(javax.faces.context.FacesContext context,
                                                 java.lang.Object state);

        public abstract void processDecodes(javax.faces.context.FacesContext context);

        public abstract void processValidators(javax.faces.context.FacesContext context);

        public abstract void processUpdates(javax.faces.context.FacesContext context);

        public abstract java.lang.Object processSaveState(javax.faces.context.FacesContext context);

        jsf生命周期中組件需要處理的五個(gè)重要階段:恢復(fù)狀態(tài),解碼,驗(yàn)證,更新,保持狀態(tài)(另外包括調(diào)用應(yīng)用,渲染),開(kāi)發(fā)自定義組件,需要特別關(guān)注這些方面,渲染階段由組件的編碼方法實(shí)現(xiàn),調(diào)用應(yīng)用階段則是actionListener監(jiān)聽(tīng)器集合的處理期。

    23. protected abstract javax.faces.context.FacesContext getFacesContext() 獲取jsf上下文環(huán)境,F(xiàn)acesContext 是一個(gè)線程安全模型,在設(shè)計(jì)上接近pojo,所以在jsf環(huán)境對(duì)FacesContext的調(diào)用得到了簡(jiǎn)化,但是jsf整體的編程規(guī)則上更希望你能把FacesContext 作為命令參數(shù)傳遞給各個(gè)實(shí)現(xiàn)細(xì)節(jié),以保證上下文的真實(shí)性,這一點(diǎn)在開(kāi)發(fā)自定義組件上要注意!
    24. protected abstract javax.faces.render.Renderer getRenderer(javax.faces.context.FacesContext context) 獲取當(dāng)前組件的渲染類。
    posted on 2007-11-02 16:38 方順 閱讀(3012) 評(píng)論(0)  編輯  收藏 所屬分類: jsf
    主站蜘蛛池模板: 中文亚洲成a人片在线观看| 国产美女精品久久久久久久免费 | 成年性羞羞视频免费观看无限| 亚洲精品在线免费看| 91香蕉国产线在线观看免费| 亚洲欧洲在线观看| 亚洲成人免费在线| 久久久久亚洲av无码专区| 2019中文字幕在线电影免费| 2022年亚洲午夜一区二区福利| 在免费jizzjizz在线播| 亚洲va在线va天堂va手机| 毛片视频免费观看| 久久久久亚洲精品无码网址色欲| 日美韩电影免费看| 一级A毛片免费观看久久精品 | 色影音免费色资源| 亚洲人成网站免费播放| 四虎免费永久在线播放| 国产精品极品美女自在线观看免费 | 久久久久久久尹人综合网亚洲| 国产一二三四区乱码免费| 亚洲国产国产综合一区首页| 91精品全国免费观看含羞草| 亚洲乱码一区二区三区国产精品| 麻豆成人精品国产免费| 国产精品永久免费| 亚洲精品无码久久久久久久| 两个人的视频高清在线观看免费| 国产亚洲午夜精品| 亚洲大成色www永久网站| 99久久免费国产精品特黄| 免费精品国产自产拍在线观看 | 足恋玩丝袜脚视频免费网站| 亚洲αⅴ无码乱码在线观看性色| 久久久无码精品亚洲日韩软件| 最近免费最新高清中文字幕韩国| 国产精品久久久久久亚洲影视| 亚洲一区二区女搞男| 国产一卡二卡3卡四卡免费| 在线播放免费人成视频网站|