jsf - PrimeFaces Tree 组件,从托管 bean 设置选定节点

标签 jsf primefaces

我在 Glassfish 3 上运行 Primefaces 3.2 和 JSF 2.0。

我已经尝试了很多,以编程方式从托管 bean 设置选定的节点。这包括像这样设置选定的节点:

public void setSelectedTreeNode(String name) {
TreeNode root = treeBean.getRoot();
List<TreeNode> tree = root.getChildren();
for(TreeNode node:tree) {
  if(node.getData().toString().contains(name)) {
    System.out.println("found the node to select");
    treeBean.setSelectedNode(node);
    break;
  }
}
RequestContext context = RequestContext.getCurrentInstance(); 
context.update(":navForm:treeSingle");
}

“找到要选择的节点”在终端中打印,但在网页的树中未选择该节点。

树是这样的:
<h:form id="navForm">
<p:tree id="treeSingle" value="#{treeBean.root}" var="node"  
       selectionMode="single" styleClass="treeStyle" 
       selection="#{treeBean.selectedNode}"
       cache="false"
       >  
   <p:ajax event="select" listener="#{treeBean.onNodeSelect}" update=":mainForm" />
   <p:treeNode>  
       <h:outputText value="#{node}" escape="false" />  
   </p:treeNode>  



编辑:TreeBean 是这样构建的:
@ManagedBean
@SessionScoped    
public class TreeBean implements Serializable {  

private TreeNode root;  

private TreeNode selectedNode;  

public TreeBean() {  
    root = new DefaultTreeNode("Root", null);  
    TreeNode node0 = new DefaultTreeNode("Node 0", root);  
    TreeNode node1 = new DefaultTreeNode("Node 1", root);  
    TreeNode node2 = new DefaultTreeNode("Node 2", root);  

    TreeNode node00 = new DefaultTreeNode("Node 0.0", node0);  
    TreeNode node01 = new DefaultTreeNode("Node 0.1", node0);  

    TreeNode node10 = new DefaultTreeNode("Node 1.0", node1);  
    TreeNode node11 = new DefaultTreeNode("Node 1.1", node1);  

    TreeNode node000 = new DefaultTreeNode("Node 0.0.0", node00);  
    TreeNode node001 = new DefaultTreeNode("Node 0.0.1", node00);  
    TreeNode node010 = new DefaultTreeNode("Node 0.1.0", node01);  

    TreeNode node100 = new DefaultTreeNode("Node 1.0.0", node10);  
}  

public TreeNode getRoot() {  
    return root;  
}  

public TreeNode getSelectedNode() {  
    return selectedNode;  
}  

public void setSelectedNode(TreeNode selectedNode) {  
    this.selectedNode = selectedNode;  
}  
}

有没有人知道如何做到这一点?

最佳答案

我使用以下方法解决了它:

node.setSelected(true);

我发现选择节点不足以让“树组件”从根节点扩展到选定节点。

为此,我使用了以下方法。在 View 上:
 <p:ajax event="expand" listener="#{tree.onExpand}"/>

在java代码上:
public void onExpand(NodeExpandEvent event) {
    expand(event.getTreeNode());
}

private void expand(TreeNode treeNode){
    if (treeNode.getParent()!=null){
        treeNode.getParent().setExpanded(true);
        expand(treeNode.getParent());
    }
}

关于jsf - PrimeFaces Tree 组件,从托管 bean 设置选定节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10597134/

相关文章:

java - 打开新页面时排除第一列

jsf - 如何制作 PrimeFaces 选项卡 "linkable"?

java beans相互干扰

jsf - PrimeFaces 组件的自定义渲染器未注册

java - 在 primefaces 时间表上每天显示可编辑的事件

css - PrimeFaces 自动完成多种样式,但 Multiple=false

java - Selenium 等待 PrimeFaces 4.0 ajax 处理

java - Primefaces:如何获取 Java 中的当前排序顺序?

Primefaces 对要在页脚中显示的特定列求和

css - 在 managedBean 中从 GUI 更改 .css 文件