【问题标题】:Primefaces Tree: click event on node's label when selectionMode='checkbox'Primefaces Tree:当 selectionMode='checkbox' 时,单击节点标签上的事件
【发布时间】:2012-10-18 21:32:51
【问题描述】:

我正在使用带有树和复选框选择的 primefaces[3.4] 展示:

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

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

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

提前致谢。

【问题讨论】:

    标签: tree primefaces


    【解决方案1】:

    您永远不必调用服务器来执行显示/隐藏页面上其他元素这样简单的事情。 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>
    

    【讨论】:

      【解决方案2】:

      这就是我解决此问题的方法,只需在 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>  
      

      考虑到您必须手动编写逻辑代码以检查/取消选中父/子节点。

      谢谢。

      【讨论】:

      • 您的方法onNodeSelect 看起来如何?是否使用NodeSelectEvent 类型的参数?
      • 这个解决方法不能正常工作 4 我。我认为不可能在组件 treeCheck 的 bean 中获取所有选中的复选框
      • @jimmybondy 是:public void onNodeSelect(NodeSelectEvent event) 并且您可以获得所有选定的对象,迭代关联的 bean 列表并评估“选定”属性。
      【解决方案3】:

      p:tree 元素能够处理 4 个事件:

      +----------+-------------------------- --+-----------------+ |活动 |监听器参数 |被解雇 | +----------+-------------------------- --+-----------------+ |展开 | org.primefaces.event.NodeExpandEvent |当节点展开时。 | |崩溃 | org.primefaces.event.NodeCollapseEvent |当节点折叠时。 | |选择 | org.primefaces.event.NodeSelectEvent |选择节点时。 | |取消选择 | org.primefaces.event.NodeUnselectEvent |取消选择节点时。 | +----------+-------------------------- --+-----------------+

      选择事件就是你想要的。

      编辑:这在树中使用复选框时不起作用。

      【讨论】:

      • select 事件仅在 (a) 选择模式为 `single 或 (b) 在复选框模式下单击复选框而不是节点(例如文本)时起作用。所以这行不通
      • @jimmybondy 我不敢相信我忽略了 OP 在树中使用复选框的事实。当然你是对的,这不起作用所以我更新了我的答案。
      • @jimmybondy,siebz0r:非常感谢您抽出宝贵时间。您认为可以在 PF 3.4 树中手动添加复选框作为节点模板吗?也许我可以使用 selection='single' 并自己控制选定的节点。另一个想法,是否可以使用 作为节点的标签来触发事件?
      • @vladiastudillo 我认为唯一干净的方法是修改 PrimeFaces 源以使节点可点击。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-05
      • 2011-05-16
      相关资源
      最近更新 更多