从jsf页面获取TreeNode

从jsf页面获取TreeNode,jsf,primefaces,treenode,Jsf,Primefaces,Treenode,我在代码中定制了一个树primefaces组件,下面是包含我的树节点的jsf页面的代码: <h:form id="formNode"> <p:commandButton value="+Add" oncomplete="PF('w_addRoot').show();" /> <p:tree value="#{treeManagedBean.root}" var="no

我在代码中定制了一个树primefaces组件,下面是包含我的树节点的jsf页面的代码:

<h:form id="formNode">
                        <p:commandButton value="+Add"  oncomplete="PF('w_addRoot').show();" />

                        <p:tree value="#{treeManagedBean.root}" var="node" animate="true" dynamic="true"
                                selection="#{treeManagedBean.selectedNode}" selectionMode="single"
                                 >
                            <p:treeNode expandedIcon="ui-icon ui-icon-folder-open"
                                        collapsedIcon="ui-icon ui-icon-folder-collapsed">
                                <h:panelGrid style="margin-top: -9px;" columns="2" >
                                    <h:outputText value="#{node}"/>
                                    <p:commandButton action="#{treeManagedBean.createNodeHere}" icon="iconForkTree" style="margin-top: 5px; margin-left:30px; max-width: 15px; max-height: 15px;">
                                        <f:setPropertyActionListener target="#{treeManagedBean.currNodeName}" value="#{node}" />
                                    </p:commandButton>    

                                </h:panelGrid>

                            </p:treeNode>
                            <p:treeNode type="document" icon="ui-icon ui-icon-document">
                                <h:link value="#{node}"/>
                            </p:treeNode>

                            <p:ajax event="select" listener="#{treeManagedBean.onNodeSelect}"></p:ajax>
                            <p:ajax event="unselect" listener="#{treeManagedBean.onNodeUnSelect}"></p:ajax>
                            <p:ajax event="expand" listener="#{treeManagedBean.onNodeExpand}"></p:ajax>
                            <p:ajax event="collapse" listener="#{treeManagedBean.onNodeCollapse}"></p:ajax>
                        </p:tree>
                    </h:form>
因此,我想在用户单击commandButton(带加号图标)时创建一个子树节点,该子树节点的父节点应该是当前节点。问题是我无法获取当前节点(我只获取其名称)。那么我可以从treeNode对象的名称中获取它吗?如果不是,则有一种方法可以在不使用事件(选择、取消选择…)的情况下执行此操作


注意,使用带有事件属性(select、expand、collapse、unselect)的f:ajax标记可以获得当前节点,但这不是我的目标

我创建了解决方案,因此我所做的是将当前节点的名称传递给managedBean,然后获取所有节点的列表(所有现有节点的ListOfNoud列表),并在创建节点的函数中:

public void createNewRoot(ActionEvent event) {

        System.out.println("---------------------- Create Node -----------------------");
        System.out.println("name of the child " + nameOfTreeNode + "\n Name of the parent : " + nameOfParent);
        TreeNode t=new DefaultTreeNode();
        for (TreeNode treeNode : listeOFNoeud) {
            if(nameOfParent.equals(treeNode.getData().toString())){
                t=new DefaultTreeNode(nameOfTreeNode, treeNode);
            }
        }
        listeOFNoeud.add(t);
        System.out.println("Node Added");
    }
nameOfTreeNode:将创建的子节点的名称

nameOfParent:当前节点(子节点的父节点)的名称

public void createNewRoot(ActionEvent event) {

        System.out.println("---------------------- Create Node -----------------------");
        System.out.println("name of the child " + nameOfTreeNode + "\n Name of the parent : " + nameOfParent);
        TreeNode t=new DefaultTreeNode();
        for (TreeNode treeNode : listeOFNoeud) {
            if(nameOfParent.equals(treeNode.getData().toString())){
                t=new DefaultTreeNode(nameOfTreeNode, treeNode);
            }
        }
        listeOFNoeud.add(t);
        System.out.println("Node Added");
    }