0

我创建了一棵树,在我的情况下,树的每个级别都代表一种对象,所以我有(级别 1:Family,级别 2:TestList,级别 3:Test),我想获取所选节点的类型树 :

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()); 
      }

但是每次我在运行时得到这个值 DefaultTreeNode 时:

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

(所选节点的类类型)

这是我在树中添加 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);  }

那么有可能做到这一点吗?

提前谢谢了

4

2 回答 2

3

发生这种情况是因为您selectedNode的确实是DefaultTreeNode.

你想要的是你的节点持有的数据,你可以通过调用selectedNode.getData(). 检索到的值是您应该比较的值。


您构建节点的方式将始终为您提供 a String,这仅仅是因为您告诉它持有 a 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>

并确保节点持有的任何类型的对象都具有该getName()方法。一个接口会很好。


确保您阅读PrimeFaces 文档并将其用作我们最好的朋友。

于 2012-09-18T20:01:39.667 回答
3

您只需进行此更改:

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

并以对象的形式检索选定的节点,请执行以下操作:

 Family family =(Family)(selectedNode.getData());
于 2012-09-19T13:34:47.300 回答