当前位置: 首页 > 知识库问答 >
问题:

Primefaces树:选择Mode='checkbox'时,单击节点标签上的事件

顾英发
2023-03-14

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

http://www.primefaces.org/showcase-labs/ui/treeSelectionCheckbox.jsf

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

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

提前感谢。

共有3个答案

梁丘缪文
2023-03-14

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. |
+----------+----------------------------------------+----------------------------+

select事件就是您想要的。

编辑:当使用树中的复选框时,这将不起作用。

施喜
2023-03-14

我就是这样解决这个问题的,只需在treeNode模板中添加一个复选框,并将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>  

考虑到您必须手动编写逻辑以在应该检查/取消检查父/子节点时检查/取消检查父/子节点。

谢谢

范侯林
2023-03-14

你永远不需要调用服务器来做一些简单的事情,比如在页面上显示/隐藏其他元素。Primefaces应该在这方面做得更好。同时,考虑一下这个javascript代码。。。

<p:treeNode type="parent" styleClass="parent">
    <h:outputText value="#{myLabel}"/>
</p:treeNode>

...

<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>
 类似资料:
  • 我有一个primefaces p:treeTable,在它里面我定义了一个包含两个组件的列:span标记和h:outputText标记。当前,如果我单击其中一个元素,就会触发select event of table。但我的目的是,仅当我单击文本的某个部分(而不是span元素)时,才会触发select事件。我该怎么做?

  • Tree在选择节点时抛出异常,在backinbean中发送正确节点的值。但例外并不是它从何而来。 日志: 最后是我的背豆

  • 我有这段代码,它在一个远程Java类中创建新的tab。 你能告诉我,当我双击树节点时,我如何修改代码以打开新选项卡。在我的代码中,当我单击一次时,选项卡就会打开。我需要什么事件处理程序?

  • 本文向大家介绍js a标签点击事件,包括了js a标签点击事件的使用技巧和注意事项,需要的朋友参考一下 当我们在处理a标签上的点击事件时发现即使href=""里面为空,点击事件的效果也不明显,这种情况该如何处理呢?常见的处理方法有以下几种: 1.a href="javascript:void(0);" rel="external nofollow" onclick="method()" 这种方法是

  • 我正在尝试用multiselect实现一个自定义的。由于我的原因,我不能使用现有的解决方案。 我的问题是:我有一个,其中一些子项被禁用。有时,当我单击启用的节点,然后单击禁用的节点时,父节点会被选中。 我想摆脱这种默认的选择行为,因为我的treeview中的所有项目都有一个数据库属性,我在实际点击项目时设置了这个属性,我不希望treeview自己选择一些项目! 更新:我需要处理对禁用项目的单击,因

  • 我从这里摘取了一些代码,允许通过单击行上的任何位置来选择JTree行。它在单行选择模式下工作良好。但是,我不确定如何修改它,以便处理多行选择。当用户进行多个选择(例如,在鼠标左键单击一行的同时按住shift或control按钮)时,我如何区分这种情况?