2012-09-18 115 views
0

我創建了一棵樹,在我的例子中樹的每一層代表一種對象,所以我有(級別1:家庭,級別2:TestList,級別3:測試),我想選擇的節點的樹類型:獲取類樹中選定節點的類型

system.out.println(selectedNode.getClass()); 

(類類型的:每次當我跑我得到這個值DefaultTreeNode我時間

if (selectedNode != null) { 
     if (selectedNode instanceof Family) { 
     pFamily = (Family)selectedNode; 
      new DefaultTreeNode(newSuite.getName(),selectedNode); 
     } else if (selectedNode instanceof TestList) { 
     pFamily = (((TestList)selectedNode).getFamilyFromModel()); 
      new DefaultTreeNode(newSuite.getName(),selectedNode.getParent()); 
     } else if (selectedNode instanceof Test) { 
     pFamily = (((Test)selectedNode).getTestListFromModel().getFamilyFromModel()); 
      new DefaultTreeNode(newSuite.getName(),selectedNode.getParent().getParent()); 
     } 

但所選節點)

下面是我如何在樹中添加一個類型爲Family的節點:

List <Family> familyList =DataLoader.getCurrentProject().getFamilyListFromModel(); 
    for (int i=0 ;i<familyList.size();i++) 
    { family=familyList.get(i); 
     familyNode= new DefaultTreeNode(family.getName(), testPlanNode); } 

所以可以這樣做嗎?

很多感謝

回答

3

你只是爲了讓這種變化:

<p:treeNode value="#{node}"> 
     <h:outputText value="#{node}" /> 
</p:treeNode> 

和對象的形式來檢索選擇的節點做到這一點:

Family family =(Family)(selectedNode.getData()); 
+0

現在感謝它的作用:))) – AmiraGL

+0

如果你的節點的數據是一個String類型,那就沒有辦法了。你打算如何將它轉換成「家庭」? – RinaldoPJr

+0

@RinaldoPJr我寫的是完成自己的答案,所以節點數據不是一個字符串它是一個對象得到它? –

3

那是因爲你的selectedNode的確是DefaultTreeNode

你想要的是你的節點所持有的數據,你可以通過調用selectedNode.getData()來做到這一點。檢索到的值是您應該比較的值。


你正在構建的節點的方式將總是給你一個String,而這僅僅是因爲你告訴它持有String,那就是家族的名字:new DefaultTreeNode(family.getName(), testPlanNode)

相反,你應該做的:new DefaultTreeNode(family, testPlanNode),並且在這個視圖:

<p:tree var="node"> 
    <p:treeNode> 
     <h:outputText value="#{node.name}"/> 
    </p:treeNode> 
</p:tree> 

和M確信節點所持有的任何對象都有getName()方法。一個接口會很好。


請務必閱讀PrimeFaces documentation並將其作爲我們最好的朋友。

+0

我嘗試過這樣的:公共無效testFn(動作事件actionEvent){ \t System.out.println(selectedNode.getData()。getClass()); }但它給了我java.lang.String類。 因此,添加節點時出現問題只需查看我的編輯,我添加了在樹中添加新節點的代碼。非常感謝 – AmiraGL

+0

@ user1657164查看更新的答案。 – RinaldoPJr

+0

我得到這個錯誤值=「#{node.name}」:在類型java.lang中找不到屬性'name'。這裏的字符串是代碼\t AmiraGL