隨筆 - 170  文章 - 536  trackbacks - 0
          <2006年1月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          常用鏈接

          我參與的團隊

          隨筆分類(103)

          搜索

          •  

          積分與排名

          • 積分 - 414331
          • 排名 - 135

          最新評論

          閱讀排行榜

             

          在我的 blog 中,JSF Tree2 組件一直都是一個熱門的討論話題,為了向大家介紹更多關于Tree2的內容,我翻譯了這篇原產于 Apache Myfaces 社區的介紹 Tree2 的文章,希望大家能夠對 Tree2 有更深的認識。

          在最后會附上一些我在使用中的體會,和大家分享,如果大家有什么想法的話,可以和我多多交流了。本人第一次翻譯文章,難免會有很多不足之處,請大家諒解,也請多多指點。

          英文原作:http://www.aygfsteel.com/steady/archive/2006/01/12/27814.html

          轉載自:http://wiki.apache.org/myfaces/Tree2

          正文如下:

          Tree2組件使用HTML表格將你的數據呈現為一個樹。這個樹是動態的:當用戶點擊它們時它們可以展開或者折疊。該組件同時支持客戶端和服務端的交互方式,在客戶端交互時使用了JavaScript。在隨后的例子中,每次用戶的點擊將產生一個Request / Response 周期,并在新的視圖狀態(View State)中重新呈現新的樹結構。

          注:在后面的例子中只有可見的(已經展開的節點)數據被傳送到客戶端。而在第一個例子(客戶端Tree),在每個HTML Response中,整個樹都被發送到客戶端瀏覽器。樹的每個節點都包含了不少的HTML代碼(假定每個節點200個字符,這個大小將取決于你希望在節點上顯示的信息的量),這些信息將被傳送到瀏覽器,其中包括了那些不可見的節點(沒有展開的節點),因為它們的一個祖系節點被展開。如果你有一個深度有四層的樹,平均每個結點擁有四個子結點,這時候你就需要傳輸10 + 102 + 103 + 104 = 11 110個節點,每個節點有200個字符,這個樹總共就有2 222 000個字符,也就是2M的數據。這個例子將向用戶說明,雖然純客戶端Tree會給客戶端帶來更好的用戶體驗,但隨之而來的帶寬問題迅速的增長。純客戶端的樹適用于小型的樹,或者在Intranet及寬帶連接中使用的中型大小的樹。對于大型的樹,或者你需要照顧到一些低帶寬的用戶的需要時,你就需要使用服務端樹。你可以通過<t:tree2>clientSideToggle這個屬性來選擇你使用的是客戶端的樹或者服務端的樹,<t:tree2 clientSideToggle="false" ...將會使用服務端的樹,屬性值設為true將會使用客戶端的樹,默認值為true

          用法:

          Backing Bean:

          Tree2組件對Backing Bean中的一個TreeModel進行操作。通常情況,你只要把這個TreeModel綁定到這個組件上就可以了,就像這樣:

          <t:tree2 value="#{myHandler.treeModel}" 


          下面需要建立一個類MyHandler,在faces-config.xml中的managed bean配置成myHandler,在例子中這個類提供了一個方法getTreeModel()用于返回一個TreeModel用于表示你的數據。

          public class MyHandler {
            
          public TreeModel getTreeModel() {
              
            }

          }


          TreeModel實際上是對TreeNode實例進行了一些簡單的包裝。

          TreeNode是一個接口,其中和tree2相關有四個方法:

          String getType()

          boolean isLeaf()

          List getChildren()

          int getChildCount()

          其它方法都沒有什么用處了,可能會在今后的版本中取消。它們要求開發者在開發backing bean中做一些并不必要的操作。

          int getChildCount() 方法返回這個節點的子結點數量,這個方法了很容易的采用如下的方式實現:

            public final int getChildCount() {
              
          return getChildren().size();
            }

          該方法的出現使得對于子結點的延遲加載變的可行。該方法的實現只需要返回該節點的子結點數量,而不需要返回每個子結點的實例。

          boolean isLeaf() 方法在該節點沒有子節點的時候返回true。這樣,一個很直截了當的實現可以這樣:

            public final boolean isLeaf() {
              
          return getChildren().isEmpty();
            }

          不管你提供了什么樣的實現,在任何時間任何情況下你都得保持getChildren().isEmpty() ==> isLeaf()isLeaf()方法實際上控制了節點被怎樣呈現:是否被當做樹葉節點(不能被繼續展開)。

          String getType() 方法決定了用怎樣的方式來呈現這個節點。在 JSF 頁面中,可以在 <t:tree2> Tag 中嵌套facetJSF將會選出與 getType() 方法返回值同名的 facet 用于呈現。如果該節點沒有找到相符的 facet,將會導致一個錯誤,并且這個方法不會返回null

          List getChildren() 方法返回一個 List,其中包含了該節點下所有的 TreeNode,這就表示這些節點將被呈現為該節點下的子結點。該 List 不能包含 null,如果該 List 的大小和getChildCount()不符,將會報錯。子結點將按照它們在 List 中的順序呈現出來。

             后面一半的將會盡快完成翻譯,大約今晚或明天就可以拿出來了。

          posted on 2006-01-13 12:59 steady 閱讀(2544) 評論(1)  編輯  收藏 所屬分類: JSF & Myfaces

          FeedBack:
          # re: 解析Tree2(一) 2008-12-11 16:07 arron
          你好 我在也在用tomahawk的tree2 整合facelets,不過一直沒有成功,不知道什么原因  回復  更多評論
            
          主站蜘蛛池模板: 黄平县| 潍坊市| 富宁县| 正阳县| 江源县| 获嘉县| 青海省| 义乌市| 临朐县| 南靖县| 来安县| 乌鲁木齐市| 玉山县| 滕州市| 呼伦贝尔市| 西充县| 濮阳县| 栾城县| 衡阳市| 湖州市| 清新县| 武定县| 嘉兴市| 湖北省| 锦屏县| 甘德县| 瓦房店市| 兴国县| 桃源县| 青海省| 民乐县| 甘德县| 台南市| 巴青县| 南川市| 金门县| 柳河县| 土默特右旗| 若羌县| 大竹县| 宁海县|