Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Primefaces 当我使用添加到标题的按钮时,如何防止手风琴面板折叠?_Primefaces_Jsf 2.2 - Fatal编程技术网

Primefaces 当我使用添加到标题的按钮时,如何防止手风琴面板折叠?

Primefaces 当我使用添加到标题的按钮时,如何防止手风琴面板折叠?,primefaces,jsf-2.2,Primefaces,Jsf 2.2,我的手风琴面板有问题。我有类似的手风琴: <p:accordionPanel> <p:tab title="tabTitle"> <f:facet name="title"> <!-- problematic button --> <p:commandButton value="button"/> </f:facet> &

我的手风琴面板有问题。我有类似的手风琴:

<p:accordionPanel>
    <p:tab title="tabTitle">
        <f:facet name="title">
            <!-- problematic button -->
            <p:commandButton value="button"/>
        </f:facet>
        <h:PanelGrid>
            <p>Accordion content</p>
        </h:panelGrdi>
    </p:tab>
</p:accordionPanel>

手风琴内容

问题是-当我点击按钮时,整个手风琴标签都会折叠

我的问题是:如何防止手风琴在点击按钮时倒塌?同时,我想手风琴崩溃时,我点击标题,但在按钮外


我使用的是PrimeFaces 5.3和JSF 2.2.11

解除头部所有事件的绑定,然后调用组件的
init
方法再次绑定它们

<p:accordionPanel widgetVar="myAccordion">
  <p:tab title="tabTitle">
    <f:facet name="title">
        <!-- problematic button -->
        <p:commandButton value="button"
          onclick="PF('myAccordion').jq.find('.ui-accordion-header').unbind()" 
          oncomplete= "PF('myAccordion').init(PF('myAccordion').cfg)"/>
    </f:facet>
    <h:PanelGrid>
        <p>Accordion content</p>
    </h:panelGrdi>
  </p:tab>
</p:accordionPanel>

手风琴内容


正如@JorgeCampos所建议的那样-我们可以使用,以防止事件从按钮到手风琴“冒泡”。有问题的代码的用法如下所示:

<p:accordionPanel>
    <p:tab title="tabTitle">
        <f:facet name="title">
            <p:commandButton value="button" onclick="event.stopPropagation();"/>
        </f:facet>
        <h:PanelGrid>
            <p>Accordion content</p>
        </h:panelGrdi>
    </p:tab>
</p:accordionPanel>

停止事件传播不会干扰

这有点复杂。这里的问题是,accordion绑定了一个click事件,而accordion内部的按钮继承了这个绑定。解决方案是trick。我在这里看到两个选项,1-你在手风琴外面创建一个图层,把按钮放在上面,然后通过编程将它定位在手风琴上。2-将代码更改为不传播按钮上的单击事件。即使单击另一个元素,是否也要将其打开???@JorgeCampos-您知道如何实现不传播单击事件的效果吗?正如我所说,您必须将代码更改为不传播事件。请看这里:@JorgeCampos-谢谢。我使用了
onclick=“event.stopPropagation()”
,现在一切都按照我想要的方式工作。非常感谢您非常感谢您提供此解决方案,我已经对其进行了测试,它可以正常工作,但我发现(根据问题帖子下面的评论)使用
event.stopPropagation()
onclick
操作中使用更简单的解决方案
<p:commandButton
    value="button"
    onclick="event.stopPropagation();"
    oncomplete="PF('someDialog').show();" <!-- open dialog by js -->
    actionListener="#{someBean.someMethod}" <!-- call java method -->
    update="someComponent" <!-- update component -->
/>