Tree Primefaces树:单击节点上的事件';选择Mode='时的s标签;复选框';

Tree Primefaces树:单击节点上的事件';选择Mode='时的s标签;复选框';,tree,primefaces,Tree,Primefaces,我正在使用primefaces[3.4]showcase,其中包含树和复选框选择: 是否可以为单击节点标签附加一个p:ajax事件 当用户单击树的节点标签时,我需要用子对象更新面板,而不一定是在用户选择它们时(单击复选框) 提前感谢。元素p:tree能够处理4个事件: +----------+----------------------------------------+----------------------------+ | Event | Listener Parameter

我正在使用primefaces[3.4]showcase,其中包含树和复选框选择:

是否可以为单击节点标签附加一个p:ajax事件

当用户单击树的节点标签时,我需要用子对象更新面板,而不一定是在用户选择它们时(单击复选框)


提前感谢。

元素
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
的参数?此解决方法无法正常工作。我认为不可能在component
treeCheck
@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>