单击按钮后如何停止在 primefaces 树中选择行

How stop row selecting in primefaces tree after button is clicked

我在树节点中有带有按钮和输出文本的 primefaces 树。 Ajax 行 select 事件调用按钮呈现。该按钮有 primefaces 累菜单,单击按钮时必须显示该菜单。问题是按钮单击调用了行 select 事件,按钮被重新渲染并且菜单消失了。

            <p:tree id="tree1" value="#{treeDNDView.root1}" var="node" selectionMode="single"
                    selection="#{treeDNDView.selectedNode1}">
                <p:ajax event="select" update=" mainform:tree1"/>
                <p:treeNode>
                    <h:panelGrid columns="3" columnClasses="width-5pct,verticalLine,width-95pct">
                        <p:outputPanel>
                            <p:commandButton id="dynaButton" value="Show" rendered="#{treeDNDView.selectedNode1.data eq node}" type="button"/>
                            <p:tieredMenu id="treeNodePanel" overlay="true" trigger="dynaButton" my="left top" at="left bottom">
                                <p:menuitem value="Save" action="#{menuView.save}"/>
                            </p:tieredMenu>
                        </p:outputPanel>
                        <p:spacer width="5px"/>
                        <p:outputPanel>
                            <h:outputText value="#{node}" escape="false"/>
                        </p:outputPanel>
                    </h:panelGrid>
                </p:treeNode>
            </p:tree>

在这种情况下如何分离按钮点击和行 select 事件?如何重写代码使功能成功运行?

.stopPropagation()添加到点击事件即可解决此问题。

                <p:outputPanel>
                    <div onclick="(function(e) { e.preventDefault(); e.stopPropagation(); })(event)">
                        <p:commandButton id="dynaButton" value="Show" rendered="#{treeDNDView.selectedNode1.data eq node}" type="button"/>
                        <p:tieredMenu id="treeNodePanel" overlay="true" trigger="dynaButton" my="left top" at="left bottom">
                            <p:menuitem value="Save" action="#{menuView.save}"/>
                        </p:tieredMenu>
                    </div>
                </p:outputPanel>