2010-07-19 69 views
0

對於wicket我很新,我試圖創建一個包含有關郵件列表信息的簡單Wicket樹。此郵件列表與某封信有關。當初始化一棵樹時展開Wickets TreeTable節點

  • MailingListDto 1
    • 用戶1
    • 用戶2
  • MailingListDto 2
    • 用戶3
    • 用戶4

如果我們正在編輯一封現有的信函,那麼與該信函相關的郵件列表將被提取into mailingListCollection,並且樹上相應的節點應該被選中並展開。出於某種原因,我似乎沒有得到這個工作。

所選和展開的節點不會在UI中顯示爲已選中或展開,但如果以編程方式遍歷選定節點(例如在onAfterRender()中)並記錄所選值和展開值,則會展開並選擇節點。

 
    tree = new TreeTable("treeTable", treeModel, treeColumns) { 
      @Override 
      public void onBeforeRender() { 
       super.onBeforeRender(); 
       if (!mailingListCollection.isEmpty()) { 
        for (MailingListDto mailingList : mailingListCollection) { 
         tree.getTreeState().expandNode(mailingList); 
         tree.getTreeState().selectNode(mailingList, true); 
        } 
       } 
       tree.updateTree(); 
      } 

      @Override 
      protected void onAfterRender() { 
       super.onAfterRender(); 
       if (LOG.isDebugEnabled()) { 
        LOG.debug("onAfterRender: " + tree.getTreeState().getSelectedNodes().size()); 
        for (Object obj : tree.getTreeState().getSelectedNodes()) { 
         LOG.debug(tree.getTreeState().isNodeSelected(obj) + " " + tree.getTreeState().isNodeExpanded(obj)); 
        } 
       } 
      } 
    }; 

    tree.setRootLess(true); 
    tree.getTreeState().setAllowSelectMultiple(true); 
    add(tree); 
+0

你可能想把它帶到郵件列表 - 我從來沒有使用樹組件,很少有檢票用戶似乎使用SO。 – ireddick 2010-07-28 21:04:39

+0

有沒有想過這個解決方案之後?我有類似的問題。 – psicopoo 2011-04-27 13:44:13

+0

由於我們沒有找到合適的TreeTable解決方案,因此我們最終採用了完全不同的方法。 – Sand 2011-05-17 05:49:36

回答

0

要展開只有你的樹的根節點:

Object rootObj = myTree.getModelObject().getRoot(); 
myTree.getTreeState().expandNode(rootObj); 

擴大也根節點的第一個子以下行添加到以前的:

myTree.getTreeState().expandNode(myTree.getModelObject().getChild(rootObj, 0)); 

請注意,您必須展開「目標」節點的所有父節點,否則屏幕上的目標節點將由於摺疊的父節點而被隱藏。

-1

wicket 1.5.10

wicket 6

看源代碼。在類FooExpansion.java中是一個方法expandAll()。

FooExpansion.java用於私有類FooExpansionModel.java用於AdvancedTreePage.java。

因此,一個簡單的解決方案,當初始化你的樹(在AdvancedTreePage.java),可以是:

FooExansionModel模型=新FooExpansionModell()

樹= createTree(供應商,型號);

((FooExpansion)model.getObject())。expandAll();