不能在primefaces中设置树节点

时间:2014-08-11 09:21:11

标签: jsf primefaces treenode

我尝试使用primefaces使用树节点,但我无法使用我的控制器设置节点

我写了这段代码

                <p:tree value="#{myModel.root}" var="node"
                    selectionMode="checkbox"
                    selection="#{myModel.selectedNodes}"
                    style="width: 100%">
                    <p:treeNode>
                        <h:outputText value="#{node.description}" />
                    </p:treeNode>
                </p:tree>

这是托管bean

@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() { 
            selectedNodes=new TreeNode[allNodes.size()];
    for (int i = 0; i < allNodes.size(); i++) {
        selectedNodes[i]=allNodes.get(i);
        if (i==0||i==100) {
            selectedNodes[i].setSelected(true);
        }else {
            selectedNodes[i].setSelected(false);
        }
    }
    return selectedNode;  
}  

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

当我点击树状页面中的按钮时,它可以工作,但我必须在打开之前设置信息

1 个答案:

答案 0 :(得分:0)

您必须将selectedNode的数据类型从TreeNode类型的单个对象更改为TreeNode的数组容器。

更改

private TreeNode selectedNode;

private TreeNode[] selectedNodes;

因为你设置了selectionMode =“checkbox”,其中可以选择多行,并且这些行需要存储在一个数组中。