ui-state-highlight在重建p:tree之后没有设置

时间:2018-03-20 07:45:05

标签: jsf primefaces tree

我使用p:树来显示我的数据结构。如果我选择一个TreeNode,我可以编辑它的属性并保存或删除节点。删除od节省后,我重建整个树。重建后,我搜索我编辑的节点,将其放回我的“选择”变量中。除了突出显示所选节点外,Everithing工作正常。 HTML-Element只是没有获得样式“ui-state-highlight”。

如何在浏览器中取代“重新选择”?

我用:   - PrimeFaces 6.2   - Java 8 Update 161   - WildFly 8.2.1.Final

我的p:tree示例:

<p:tree id="project-tree" dynamic="true" value="# projectTree.projectTreeRootNode}" var="node" styleClass="pro-tree" selectionMode="single" selection="#{projectTree.selectedNode}">

    <p:ajax event="expand" listener="#{projectTree.onNodeExpand}" process="@this" update=":project-forms" />
    <p:ajax event="collapse" listener="#{projectTree.onNodeCollapse}" process="@this" update=":project-forms" />
    <p:ajax event="select" listener="#{projectTree.onNodeSelect}" process="@this" update=":project-forms" />

    <p:treeNode styleClass="pro-treenode #{node.styleClass}">
        <i class="#{node.icon}" aria-hidden="true"></i> #{node.label}
    </p:treeNode>

</p:tree>

通过我的节点快速而肮脏的解决方案:

if (null != selectedNode)
{
  Boolean found = false;
  for (TreeNode childNode : projectTreeRootNode.getChildren())
  {
    found = findSelectedNode(childNode, childNode.getParent());
    if (found == true)
    {
      break;
    }
    for (TreeNode childChildNode : childNode.getChildren())
    {
      found = findSelectedNode(childChildNode, childChildNode.getParent());
      if (found == true)
      {
        break;
      }
      for (TreeNode childChildChildNode : childChildNode.getChildren())
      {
        found = findSelectedNode(childChildChildNode, childChildChildNode.getParent());
        if (found == true)
        {
          break;
        }
        for (TreeNode childChildChildChildNode : childChildChildNode.getChildren())
        {
          found = findSelectedNode(childChildChildChildNode, childChildChildChildNode.getParent());
          if (found == true)
          {
            break;
          }
        }
      }
    }
  }
  onNodeSelect();
}

找到我之前选择的节点的代码:

private Boolean findSelectedNode(TreeNode tn, TreeNode tnParent)
{
    PROTreeNodeData dataSelected = (PROTreeNodeData) selectedNode.getData();
    PROTreeNodeData dataTn = (PROTreeNodeData) tn.getData();

    if (tnParent.getData().toString().contains("Root"))
    {
      if (dataSelected.getLabel().equals(dataTn.getLabel()) && dataSelected.getType().equals(dataTn.getType()))
      {
        selectedNode = tn;
        return true;
      }
    }
    else
    {
      TreeNode tnSelectedParent = selectedNode.getParent();

      PROTreeNodeData selectedParentData = (PROTreeNodeData) tnSelectedParent.getData();
      PROTreeNodeData tnParentData = (PROTreeNodeData) tnParent.getData();

      if (dataSelected.getLabel().equals(dataTn.getLabel()) && dataSelected.getType().equals(dataTn.getType()) && selectedParentData.getLabel().equals(tnParentData.getLabel()) && selectedParentData.getType().equals(tnParentData.getType()))
      {
        selectedNode = tn;
        return true;
      }
    }
    return false;
}

0 个答案:

没有答案