我有一个我在我的代码中自定义的Tree primefaces组件,这里是包含我的treeNodes的这个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>
这是应该创建子节点的managedBean中的函数:
public void createNodeHere(){
System.out.println("current node Name : "+currNodeName);
// get the current node from the giving name currNodeName
currNodeName="";
}
所以我想在用户点击commandButton(带加号图标)时创建子treeNode,并且这个子treeNode的父节点应该是当前节点。问题是我无法获得当前的节点(我只得到它的名字)。我可以从名称中获取treeNode对象吗?如果没有,有一种方法可以不使用事件(选择,取消选择......)
请注意,使用f:ajax标记和事件属性(选择,展开,折叠,取消选择)我可以获得当前节点,但它不是我的目标。
答案 0 :(得分:1)
我创建了解决方案,所以我所做的是将当前节点的名称传递给我的managedBean,然后我获取所有节点的liste(所有existe节点的listeOFNoeud列表)并在创建该函数的函数中节点:
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 :当前节点的名称(子节点的父节点)。