我使用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;
}