<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編程隨筆 閱讀(2155) 評論(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)

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 69式互添免费视频| 色欲A∨无码蜜臀AV免费播| 成人免费毛片视频| 亚洲人精品亚洲人成在线| 四虎成年永久免费网站| 亚洲综合图片小说区热久久| 最近最新高清免费中文字幕| 三级黄色在线免费观看| 亚洲国产日韩在线观频| 一区视频免费观看| 91精品免费久久久久久久久| 亚洲精品白色在线发布| 91网站免费观看| 中文亚洲AV片在线观看不卡| 你是我的城池营垒免费看| 真实乱视频国产免费观看| 亚洲欧美国产日韩av野草社区| 国产精品免费视频播放器| 人人爽人人爽人人片A免费| 毛片a级毛片免费播放100| 亚洲AV综合永久无码精品天堂| 又粗又大又硬又爽的免费视频| 四虎影视永久在线精品免费| 亚洲色婷婷六月亚洲婷婷6月| 色噜噜亚洲男人的天堂| 日本成人在线免费观看| xxxxx做受大片视频免费| 亚洲va中文字幕无码久久| av无码国产在线看免费网站| 亚洲精品久久无码| 国产AV无码专区亚洲AV手机麻豆| 久久久久国产免费| 亚洲日本一线产区和二线产区对比| 亚洲va中文字幕无码| 日韩免费高清大片在线| 亚洲精品中文字幕| 亚洲乱码中文字幕综合| 国产1000部成人免费视频| 日韩毛片在线免费观看| 亚洲精品无码久久毛片波多野吉衣| 精品国产精品久久一区免费式|