Jsf 获取树中选定节点的类类型

Jsf 获取树中选定节点的类类型,jsf,primefaces,facelets,Jsf,Primefaces,Facelets,我创建了一棵树,在我的例子中,树的每一层都代表一种对象类型,所以我有(级别1:族,级别2:测试列表,级别3:测试),我想获得树中选定节点的类型: if (selectedNode != null) { if (selectedNode instanceof Family) { pFamily = (Family)selectedNode; new DefaultTreeNode(newSuite.getName(),selectedNode);

我创建了一棵树,在我的例子中,树的每一层都代表一种对象类型,所以我有(级别1:族,级别2:测试列表,级别3:测试),我想获得树中选定节点的类型:

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()); 
      }
List <Family> familyList =DataLoader.getCurrentProject().getFamilyListFromModel();
    for (int i=0 ;i<familyList.size();i++)
    {   family=familyList.get(i);
        familyNode= new DefaultTreeNode(family.getName(), testPlanNode);  }
但每次我得到这个值DefaultTreeNode时,我运行:

system.out.println( selectedNode.getClass());
(选定节点的类类型)

以下是如何在树中添加类型为Family的节点:

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

对于(int i=0;i,发生这种情况是因为您的
selectedNode
确实是一个
DefaultTreeNode

您需要的是节点所持有的数据,您可以通过调用
selectedNode.getData()
来实现。检索到的值就是您应该比较的值


您构建节点的方式总是会给您一个
字符串,这仅仅是因为告诉它保存一个
字符串,即族的名称:
新的DefaultTreeNode(family.getName(),testPlanNode)

相反,您应该执行以下操作:
newdefaulttreenode(family,testPlanNode)
,并在视图上:

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

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



确保您将其作为我们最好的朋友阅读和使用。

之所以会出现这种情况,是因为您的
selectedNode
确实是
DefaultTreeNode

您需要的是节点所持有的数据,您可以通过调用
selectedNode.getData()
来实现。检索到的值就是您应该比较的值


您构建节点的方式总是会给您一个
字符串,这仅仅是因为告诉它保存一个
字符串,即族的名称:
新的DefaultTreeNode(family.getName(),testPlanNode)

相反,您应该执行以下操作:
newdefaulttreenode(family,testPlanNode)
,并在视图上:

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

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



请确保您将其作为我们最好的朋友阅读和使用。

您只需进行以下更改:

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

您只需进行以下更改:

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

我这样试过:public void testFn(ActionEvent){System.out.println(selectedNode.getData().getClass());}但是它给了我类java.lang.String。因此,添加节点时出现了一个问题。在我的编辑中,我添加了在树中添加新节点的代码。我得到了这个错误值=“#{node.name}”:在类型java.lang.String上找不到属性“name”。这是代码@user1657164,因为您仍在使用
family.getName()初始化
DefaultTreeNode
。仔细阅读我的答案,我演示了如何使用整个
系列
对象初始化它:
新的DefaultTreeNode(系列,testPlanNode)
。是的,我就是这么做的,但是值的问题在于=“#{projectManagementMB.root}”var=“node”节点变量类型为TreeNode@user1657164是的,它应该是这样工作的。也许您可以提供当前的树创建代码、xhtml和bean。我是这样尝试的:public void testFn(ActionEvent ActionEvent){System.out.println(selectedNode.getData().getClass());}但是它给了我类java.lang.String。因此,添加节点时出现了一个问题。在我的编辑中,我添加了在树中添加新节点的代码。我得到了这个错误值=“#{node.name}”:在类型java.lang.String上找不到属性“name”。这是代码@user1657164,因为您仍在使用
family.getName()初始化
DefaultTreeNode
。仔细阅读我的答案,我演示了如何使用整个
系列
对象初始化它:
新的DefaultTreeNode(系列,testPlanNode)
。是的,我就是这么做的,但是值的问题在于=“#{projectManagementMB.root}”var=“node”节点变量类型为TreeNode@user1657164是的,它应该是这样工作的。也许你可以为树的创建提供你当前的代码,xhtml和bean。如果你的节点的数据是
字符串
,那就不可能工作了。你打算如何将它转换到
家族
?@RinaldoPJr我写的是为了完成你自己的答案,所以节点data不是字符串,而是对象,明白吗?有关更多信息,请参见以下基本示例:()如果节点的数据是一个
字符串
,那么这是不可行的。你打算如何将其转换为
系列
?@RinaldoPJr我写的是完成你自己的答案,这样节点数据就不是字符串,而是一个对象明白了吗?有关更多信息,你可以看到这个基本示例:()