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

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

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

    初學jsf自定義標簽時遇到的問題總結

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

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

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

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

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

    評論

    # re: 初學jsf自定義標簽時遇到的問題總結 2008-01-09 13:48 阿燈

    郁悶,聽不明白。  回復  更多評論   

    # re: 初學jsf自定義標簽時遇到的問題總結 2008-01-23 16:40 javy

    太難了
      回復  更多評論   

    # re: 初學jsf自定義標簽時遇到的問題總結[未登錄] 2008-02-14 12:37 jgao

    不好意思,可能我沒說清楚
    但主要是要懂得jsf而且自己正在學習jsf的自定義標簽
    這樣應該就知道我寫的什么了  回復  更多評論   

    # re: 初學jsf自定義標簽時遇到的問題總結 2008-08-22 09:10 asfd

    有沒有例子?  回復  更多評論   


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


    網站導航:
     
    <2007年11月>
    28293031123
    45678910
    11121314151617
    18192021222324
    2526272829301
    2345678

    導航

    統計

    常用鏈接

    留言簿(1)

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 91亚洲国产成人精品下载| 午夜性色一区二区三区免费不卡视频| 美女视频黄.免费网址| 亚洲成a人片在线不卡| 久久精品国产亚洲AV香蕉| 亚洲福利在线视频| 久久99国产亚洲精品观看| 亚洲av无码一区二区三区不卡 | 国产无限免费观看黄网站| 美女被免费网站在线视频免费| 亚洲欧美日本韩国| 亚洲卡一卡二卡乱码新区| 亚洲精品国产啊女成拍色拍| 亚洲国产片在线观看| 亚洲性无码av在线| 亚洲av乱码一区二区三区| 国产精品亚洲午夜一区二区三区| 亚洲综合av一区二区三区不卡| 亚洲色大成网站www永久网站| 亚洲精品无码日韩国产不卡av| jzzijzzij在线观看亚洲熟妇| 日本精品久久久久久久久免费| 中文字幕在线视频免费观看| 久久青草91免费观看| 2021久久精品免费观看| 一二三四影视在线看片免费| 国产精品嫩草影院免费| 亚洲成人高清在线| 亚洲理论电影在线观看| 日韩亚洲Av人人夜夜澡人人爽 | jlzzjlzz亚洲乱熟在线播放| 亚洲国产AV无码专区亚洲AV| 亚洲黄色网站视频| 亚洲综合精品伊人久久| 特级毛片aaaa免费观看| 国产午夜精品久久久久免费视 | 一区二区三区无码视频免费福利 | 成人a毛片视频免费看| 国产免费无码一区二区| 青娱分类视频精品免费2| 国产免费av片在线无码免费看|