通過一次小小的實踐,終于了解如何使用tomahawk中的tree2這個組件了,并且寫了小段程序,從xml中讀取樹的結構,生成一個tree,不過tree2不能直接和xml綁定是一個遺憾,那樣就會省不少事情了。記下一點心得,以供后來參考了。
對tree2的操作分為兩部分,一部分是在頁面中通過tag定義樣式相關的東西,一部分就是通過編程添加樹的節點,起初看了sample以后總是以為這東西有多么的復雜,其實邏輯是很簡單的,只是sample中定義了多種不同的樣式的節點,看上去很復雜而已。
下面附上我對sample簡化過的這段tag來說明一下。
<t:tree2 value="#{catalog.node}" var="node" id="clientside" varNodeToggler="t" >
<f:facet name="folder">
<h:panelGroup>
<f:facet name="expand">
<t:graphicImage value="images/yellow-folder-open.png" rendered="#{t.nodeExpanded}" border="0"/>
</f:facet>
<f:facet name="collapse">
<t:graphicImage value="images/yellow-folder-closed.png" rendered="#{!t.nodeExpanded}" border="0"/>
</f:facet>
<h:outputText value="#{node.description}"/>
</h:panelGroup>
</f:facet>
</t:tree2>
tree2的主tag定義了tree的根節點和一些相關的參數。嵌套的那個facet定義了一種節點的樣式,包括展開與關閉時的圖片,以及顯示的文字內容。
在程序里面,我們root TreeNodeBase = new TreeNodeBase(…)來創建一個root節點,然后通過root.getChildren().add(new TreeNodeBase(…))為其添加子節點,任何一個節點都可以添加任意多的子節點,通過這樣的操作,我們可以很容易的生成一個tree的結構了,實際上,這個tree的結構是通過遞歸從xml中讀取出來,生成一個和xml tree完全相同的結構。
除了明白如何去用這個tree2之外的收獲就是,終于明白了如何去通過遞歸方法遍歷一個樹形結構,雖然在學校里學過遍歷的算法,也抄過例程,但從來沒有理解過是怎么一回事,終于在實踐中理解了,實踐才是軟件的根本之道。
http://www.aygfsteel.com/Files/steady/catalog.rar