Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf Primefaces树通过commandButtons动态添加同级/子级_Jsf_Primefaces_Tree_Treenode - Fatal编程技术网

Jsf Primefaces树通过commandButtons动态添加同级/子级

Jsf Primefaces树通过commandButtons动态添加同级/子级,jsf,primefaces,tree,treenode,Jsf,Primefaces,Tree,Treenode,我试图在primefaces中实现一个动态树结构,其中用户从根节点开始,将能够通过两个命令按钮向每个节点添加兄弟节点和子节点 示例如下所示: 根目录 在按下添加兄弟姐妹后 添加子项后按下(2次) 接下来,我实施了以下结构: tree.xhtml <p:tree id="tree" value="#{treeController.root}" var="node" dynamic="true" cache="false"> <p:ajax event="e

我试图在primefaces中实现一个动态树结构,其中用户从
根节点开始
,将能够通过两个
命令按钮
向每个节点添加
兄弟节点
子节点

示例如下所示:

根目录

在按下添加兄弟姐妹后

添加子项后按下(2次)

接下来,我实施了以下结构:

tree.xhtml

<p:tree id="tree" value="#{treeController.root}" 
    var="node" dynamic="true" cache="false">
    <p:ajax event="expand" listener="#{treeController.onNodeExpand}" />
    <p:treeNode>
       <h:outputText value="#{node}" />
       <p:commandButton style="width:50%; margin: 10px;" value="Add Sibling">
           <p:ajax event="click" listener="#{treeController.addSibling(node)}" update="@this"> 
           </p:ajax>
       </p:commandButton>
       <p:commandButton style="width:50%; margin: 10px;" value="Add Child">
           <p:ajax event="click" listener="#{treeController.addChild(node)}" update="@this"> 
           </p:ajax>
       </p:commandButton>
    </p:treeNode>
</p:tree>
但是,单击按钮后,我发现
严重[org.primefaces.application.exceptionhandler.PrimeExceptionHandler](默认任务-6)方法未找到:TreeController.addSibling(java.lang.String)
,这是由于函数期望接收字符串参数(节点)而导致的

有没有办法在按钮的侦听器上检索TreeNode引用

可能是任何节点事件,比如
NodeExpandEvent

PS:根据
var
属性,我将
Primefaces 7.0
JSF 2.1
一起使用:

用于引用每个树节点数据的请求范围变量的名称

这是传递给节点构造函数的第一个参数:

org.primefaces.model.DefaultTreeNode.DefaultTreeNode(Object data, TreeNode parent)
从您的代码和异常中可以看出,它的类型是
String

如果要引用实际节点,请使用
nodeVar
属性,而不是
var
属性旁边的属性:

nodeVar:将用于引用使用EL的当前树节点的请求范围变量的名称

在您的情况下,您可以这样修改示例:

<p:tree id="tree" value="#{treeController.root}" 
    var="node" nodeVar="theNode" dynamic="true" cache="false">
    <p:ajax event="expand" listener="#{treeController.onNodeExpand}" />
    <p:treeNode>
       <h:outputText value="#{node}" />
       <p:commandButton style="width:50%; margin: 10px;" value="Add Sibling" 
        action="#{treeController.addSibling(theNode)}" update="@this" />
       <p:commandButton style="width:50%; margin: 10px;" value="Add Child"  
        action="#{treeController.addChild(theNode)}" update="@this" />
    </p:treeNode>
</p:tree>

根据
var
属性:

用于引用每个树节点数据的请求范围变量的名称

这是传递给节点构造函数的第一个参数:

org.primefaces.model.DefaultTreeNode.DefaultTreeNode(Object data, TreeNode parent)
从您的代码和异常中可以看出,它的类型是
String

如果要引用实际节点,请使用
nodeVar
属性,而不是
var
属性旁边的属性:

nodeVar:将用于引用使用EL的当前树节点的请求范围变量的名称

在您的情况下,您可以这样修改示例:

<p:tree id="tree" value="#{treeController.root}" 
    var="node" nodeVar="theNode" dynamic="true" cache="false">
    <p:ajax event="expand" listener="#{treeController.onNodeExpand}" />
    <p:treeNode>
       <h:outputText value="#{node}" />
       <p:commandButton style="width:50%; margin: 10px;" value="Add Sibling" 
        action="#{treeController.addSibling(theNode)}" update="@this" />
       <p:commandButton style="width:50%; margin: 10px;" value="Add Child"  
        action="#{treeController.addChild(theNode)}" update="@this" />
    </p:treeNode>
</p:tree>


首先更改从
中删除显式
p:ajax
标记,并将其转换为
不确定是否有帮助,但它“更好”…请发布您的PrimeFaces versionI更新问题并添加它,我还按照您的建议更改了按钮,未按预期进行任何更改:/1从更改开始,从
中删除显式
p:ajax
标记,并将其转换为
不确定是否有帮助,但它“更好”…请发布您的PrimeFaces versionI更新问题并添加它,我还按照您的建议更改了按钮,未按预期进行任何更改:/ahh。。。你打败了我;-)。之前没有个人电脑,只有一部手机…@kukeltje所以在智能手机上没有乐趣。。。没有IDE,很难输入特殊字符,错误的语言设置有时也会导致错误的拼写更正:D.你还在holyday吗?键盘不是真正的问题,拼写更正总是关闭(参见我的一些帖子;-))并且没有。。。大海、沙滩、阳光(还有鸡尾酒、现场音乐和高尔夫)太多了。。。你打败了我;-)。之前没有个人电脑,只有一部手机…@kukeltje所以在智能手机上没有乐趣。。。没有IDE,很难输入特殊字符,错误的语言设置有时也会导致错误的拼写更正:D.你还在holyday吗?键盘不是真正的问题,拼写更正总是关闭(参见我的一些帖子;-))并且没有。。。大海、沙滩、太阳(还有鸡尾酒、现场音乐和高尔夫)都结束了