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

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

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

    初學(xué)jsf自定義標(biāo)簽時遇到的問題總結(jié)

    1.定義一個標(biāo)簽要用到兩個java類,這個跟jsp的自定義標(biāo)簽有點不一樣
      第一個類繼承UIComponentTag, 用于定義標(biāo)簽的屬性和設(shè)置標(biāo)簽的所有屬性值到控件的map屬性attributes或valueBinding中
      第二個類繼承UIInput或者UIOutput,用于渲染標(biāo)簽的內(nèi)容,真正打印標(biāo)簽內(nèi)容的地方就在這里
       
    2.這兩個類是怎么聯(lián)系的
     我們需要像定義jsf的bean的影射文件一樣,在faces-config.xml或者自己定義的xml文件里面定義第二個類
     如:
     
    <faces-config>
      
    <!--分頁標(biāo)簽-->
      
    <component>
        
    <component-type>pageTag</component-type>
        
    <component-class>com.jsf.PageComponent</component-class>
      
    </component>
      
      
    </faces-config>
      然后第一個類要實現(xiàn)父類的一個方法 public String getComponentType();從這里返回一個字符串pageTag,這樣就跟第二個類聯(lián)系起來了

    3.標(biāo)簽屬性的定義
      標(biāo)簽屬性的定義一般都是可轉(zhuǎn)化為字符串的類型的,除非你還是用
    <%=rowList%>這種jsp賦值的方式
      別以為你定義的一個List類型的屬性可以用jsf的EL表達(dá)式可以直接賦值進(jìn)來,EL表達(dá)式傳進(jìn)來以后屬性接收的就是這一串EL表達(dá)式
      所以就是說你的屬性就是要字符串類型的

    4.那么jsf自定義標(biāo)簽是怎么接收EL表達(dá)式綁定的列表的
     先通過父類的isValueReference(屬性值),來判斷該屬性的值是否是一個EL的表達(dá)式
     如果是則通過獲取綁定值得方式把真正的屬性的值設(shè)置到標(biāo)簽父類的valueBinding對像中
     否則直接把屬性的值添加到標(biāo)簽父類的attributes對像中
      if (isValueReference(屬性值)) {
        javax.faces.el.ValueBinding vb = Util.getValueBinding(value.toString());
        component.setValueBinding(name, vb); //component就是標(biāo)簽對像,name就是標(biāo)簽的屬性名稱
     } else {
        component.getAttributes().put(name, 屬性值);
     }

     這就是個設(shè)置屬性值的過程,可以在第1點說的第一個類里面的protected void setProperties(UIComponent component)方法
    5.現(xiàn)在知道標(biāo)簽屬性值的作用了嗎
     是的標(biāo)簽屬性值只不過是起個作用而已,而不是我們真正所要的值
     也就是說我們是不能從這些屬性中直接取值的
     
    6.那么我們怎么取屬性的真正的值呢
     可以先從第4點說的標(biāo)簽父類的attributes對像中取值
     如果取不到值那就到標(biāo)簽父類的valueBinding對像中取值
     說白了就是,通過第4步我們屬性的真正的值不是放在attributes就是在valueBinding中
     Object obj = component.getAttributes().get(name); //component就是標(biāo)簽對像,name就是標(biāo)簽的屬性名稱
     if (obj == null) {
       ValueBinding vb = component.getValueBinding(name);
       if (vb != null) {
        return vb.getValue(context);
       } else {
        return null;
       }
     }
     這個過程就是取屬性值的過程,在第1點說的第二個類里面進(jìn)行
     
    7.現(xiàn)在屬性值也可以取到了,那么我們要怎么打印標(biāo)簽的內(nèi)容呢
      我們可以在第二個類的encodeBegin或者encodeEnd中進(jìn)行
      public void encodeBegin(FacesContext context) throws IOException
      public void encodeEnd(FacesContext context) throws IOException
     
      取屬性值的過程也可以在這里進(jìn)行,取完值后就是把值組裝到標(biāo)簽內(nèi)容的相應(yīng)位置中就完了
      
      基本上就是這幾點

    posted on 2007-11-21 19:21 JGAO編程隨筆 閱讀(2147) 評論(4)  編輯  收藏

    評論

    # re: 初學(xué)jsf自定義標(biāo)簽時遇到的問題總結(jié) 2008-01-09 13:48 阿燈

    郁悶,聽不明白。  回復(fù)  更多評論   

    # re: 初學(xué)jsf自定義標(biāo)簽時遇到的問題總結(jié) 2008-01-23 16:40 javy

    太難了
      回復(fù)  更多評論   

    # re: 初學(xué)jsf自定義標(biāo)簽時遇到的問題總結(jié)[未登錄] 2008-02-14 12:37 jgao

    不好意思,可能我沒說清楚
    但主要是要懂得jsf而且自己正在學(xué)習(xí)jsf的自定義標(biāo)簽
    這樣應(yīng)該就知道我寫的什么了  回復(fù)  更多評論   

    # re: 初學(xué)jsf自定義標(biāo)簽時遇到的問題總結(jié) 2008-08-22 09:10 asfd

    有沒有例子?  回復(fù)  更多評論   


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    <2007年11月>
    28293031123
    45678910
    11121314151617
    18192021222324
    2526272829301
    2345678

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿(1)

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 18勿入网站免费永久| 亚洲AV色无码乱码在线观看| 永久免费无码网站在线观看个| 免费无码又爽又刺激聊天APP| 亚洲国产亚洲片在线观看播放| 久久九九AV免费精品| 久久夜色精品国产噜噜亚洲AV| 成人性生交大片免费看中文| 亚洲韩国精品无码一区二区三区| 成人无码精品1区2区3区免费看| 久久亚洲欧洲国产综合| 中国一级特黄高清免费的大片中国一级黄色片| 亚洲AV无码乱码在线观看| 一级毛片试看60分钟免费播放| 国产偷窥女洗浴在线观看亚洲| 国产精品免费久久久久久久久 | 又长又大又粗又硬3p免费视频| 亚洲精品成人久久久| 中国国语毛片免费观看视频| 亚洲国产精品自在在线观看 | 女人与禽交视频免费看| 亚洲αⅴ无码乱码在线观看性色| 又粗又硬免费毛片| 你是我的城池营垒免费观看完整版| 亚洲国产精品国自产电影| 4虎永免费最新永久免费地址| 亚洲精品9999久久久久无码| 亚洲国产成人爱av在线播放| 国产在线精品免费aaa片| 亚洲jjzzjjzz在线观看| 波多野结衣中文一区二区免费| 免费在线黄色电影| 亚洲18在线天美| 亚洲人成网站18禁止一区| 久久午夜羞羞影院免费观看 | 亚洲人成综合网站7777香蕉| 亚洲 自拍 另类小说综合图区| 野花香高清视频在线观看免费 | 亚洲av乱码一区二区三区按摩| 国产国拍精品亚洲AV片| 男女做羞羞的事视频免费观看无遮挡|