Jsf Primefaces树通过commandButtons动态添加同级/子级
我试图在primefaces中实现一个动态树结构,其中用户从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
根节点开始
,将能够通过两个命令按钮
向每个节点添加兄弟节点
和子节点
示例如下所示:
根目录
在按下添加兄弟姐妹后
添加子项后按下(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吗?键盘不是真正的问题,拼写更正总是关闭(参见我的一些帖子;-))并且没有。。。大海、沙滩、太阳(还有鸡尾酒、现场音乐和高尔夫)都结束了