Tree Primefaces树:单击节点上的事件';选择Mode='时的s标签;复选框';
我正在使用primefaces[3.4]showcase,其中包含树和复选框选择: 是否可以为单击节点标签附加一个p:ajax事件 当用户单击树的节点标签时,我需要用子对象更新面板,而不一定是在用户选择它们时(单击复选框)Tree Primefaces树:单击节点上的事件';选择Mode='时的s标签;复选框';,tree,primefaces,Tree,Primefaces,我正在使用primefaces[3.4]showcase,其中包含树和复选框选择: 是否可以为单击节点标签附加一个p:ajax事件 当用户单击树的节点标签时,我需要用子对象更新面板,而不一定是在用户选择它们时(单击复选框) 提前感谢。元素p:tree能够处理4个事件: +----------+----------------------------------------+----------------------------+ | Event | Listener Parameter
提前感谢。元素
p:tree
能够处理4个事件:
+----------+----------------------------------------+----------------------------+
| Event | Listener Parameter | Fired |
+----------+----------------------------------------+----------------------------+
| expand | org.primefaces.event.NodeExpandEvent | When a node is expanded. |
| collapse | org.primefaces.event.NodeCollapseEvent | When a node is collapsed. |
| select | org.primefaces.event.NodeSelectEvent | When a node is selected. |
| unselect | org.primefaces.event.NodeUnselectEvent | When a node is unselected. |
+----------+----------------------------------------+----------------------------+
+----------+----------------------------------------+----------------------------+
|触发事件|侦听器参数||
+----------+----------------------------------------+----------------------------+
|展开节点时展开| org.primefaces.event.NodeExpandEvent ||
|折叠| org.primefaces.event.NodeCollapseEvent |当节点折叠时|
|选择节点时,选择| org.primefaces.event.NodeSelectEvent ||
|取消选择节点时取消选择| org.primefaces.event.NodeUnselectEvent ||
+----------+----------------------------------------+----------------------------+
选择事件就是您想要的
编辑:在树中使用复选框时,这将不起作用。我就是这样解决的,只需在树节点模板中添加一个复选框并将selectionMode更改为single
<p:tree value="#{treeBean.root}" var="node" dynamic="true" cache="false"
selectionMode="single" selection="#{treeBean.selectedNode}" id="tree">
<p:ajax event="select" update=":form:messages" listener="#{treeBean.onNodeSelect}" />
<p:treeNode>
<p:selectBooleanCheckbox id="treeCheck" value="#{node.selected}"/>
<h:outputText value="#{node.name}" />
</p:treeNode>
</p:tree>
考虑到您必须手动编写逻辑代码,以便在需要时选中/取消选中父/子节点
谢谢。您永远不必调用服务器来做一些简单的事情,比如在页面上显示/隐藏其他元素。Primefaces应该在这方面做得更好。同时,考虑这个JavaScript代码…
<p:treeNode type="parent" styleClass="parent">
<h:outputText value="#{myLabel}"/>
</p:treeNode>
jQuery(“.parent>.ui树可选>.ui树节点标签”)。每个(函数(){
var label=jQuery(this);
标签。单击(函数(){
label.sides(“.ui树切换器”)。单击();
});
});
select事件仅在(a)选择模式为“单一”或(b)单击复选框时处于复选框模式,而不是节点(例如文本)时有效。所以这不会发生work@jimmybondy我不敢相信我忽略了OP在树中使用复选框的事实。当然你是对的,这行不通,所以我更新了我的答案。@jimmybondy,siebz0r:非常感谢你的时间。您认为可以在PF 3.4树中手动添加复选框作为节点模板吗?也许我可以使用selection='single'并自己控制所选节点。另一个想法是,是否可以使用as节点的标签来触发事件?@vladiastudillo我认为唯一干净的方法是修改PrimeFaces源,使节点可单击。您的方法是什么样的?它是否使用类型为NodeSelectEvent
的参数?此解决方法无法正常工作。我认为不可能在componenttreeCheck
@jimmybondy yes:public void onNodeSelect(NodeSelectEvent事件)的bean中获得所有选中的复选框,您可以通过迭代相关联的bean列表和评估“selected”属性来获得所有选中的对象。
<script>
jQuery(".parent > .ui-tree-selectable > .ui-treenode-label").each(function(){
var label = jQuery(this);
label.click(function(){
label.siblings(".ui-tree-toggler").click();
});
});
</script>