<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)

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲一级在线观看| 亚洲图片激情小说| 尤物视频在线免费观看 | 久操免费在线观看| 亚洲精品无码高潮喷水在线| av午夜福利一片免费看久久| 亚洲国产专区一区| 国产免费福利体检区久久| 91麻豆国产自产在线观看亚洲| 2022国内精品免费福利视频| 在线观看亚洲精品福利片| 爽爽爽爽爽爽爽成人免费观看| 亚洲精品乱码久久久久久自慰| 免费人成网站在线观看不卡| 中文字幕亚洲精品资源网| 麻豆视频免费播放| 中文无码亚洲精品字幕| 国产三级免费电影| 成人一区二区免费视频| 亚洲黄色免费在线观看| 四虎永久在线精品免费网址| 久久精品亚洲日本波多野结衣 | 最近中文字幕免费mv视频8| 亚洲精品天堂无码中文字幕| 免费观看日本污污ww网站一区| 男女啪啪免费体验区| 亚洲成av人影院| 国产精品怡红院永久免费| 亚洲AV日韩AV无码污污网站| 亚洲国产V高清在线观看| 日本免费一区二区久久人人澡| 亚洲日韩中文字幕| 亚洲国产精品国产自在在线| 国产日韩AV免费无码一区二区 | 亚洲国产成人乱码精品女人久久久不卡 | 亚洲视频免费播放| 午夜亚洲国产精品福利| 永久亚洲成a人片777777| 亚洲免费观看网站| 日韩在线观看免费| 亚洲人成在线播放|