如何以编程方式折叠 primefaces 手风琴面板中的所有面板?

How to collapse programmatically all panels in a primefaces accordionPanel?

我在 primefaces 对话框中有一个 primefaces 手风琴面板,每次打开对话框(对话框为 dynamic="true")时,手风琴面板的所有面板都会折叠。

accordionPanel 有一个特点,它可以有 0 到 2 个面板,直到用户单击 menuItem 时才知道这一点。这些面板的存在与否取决于backing bean中是否存在2个对象。

我的代码:

<p:accordionPanel activeIndex="-1" dynamic="true" widgetVar="accordionPanelWV" id="accordionPanel">
    <p:tab title="#{messages['comun.provA']}" rendered="#{productsBean.productSel.providerA != null}">
        ....
    </p:tab>
    <p:tab title="#{messages['comun.provB']}" rendered="#{productsBean.productSel.providerB != null}">
        ....
    </p:tab>
</p:accordionPanel>

我尝试了以下方法,但 none 给了我预期的结果

Select 在 open/close 对话框

之前 JS/Jquery 中的负数、空索引或无效索引
PF('accordionPanelWV').select(-1);
PF('accordionPanelWV').select(null);
PF('accordionPanelWV').select("");

在 open/close 对话框之前取消选择 JS/Jquery 中的所有索引

PF('accordionPanelWV').unselect(0);
PF('accordionPanelWV').unselect(1);

我该怎么做?

Primefaces 版本 8.0

谢谢

这将在 PF 9.0 中修复:https://github.com/primefaces/primefaces/issues/6605

要添加 selectAllunselectAll 方法来展开全部或折叠所有面板,只需将此 JS 代码添加到您的应用程序中即可。

if (PrimeFaces.widget.AccordionPanel) {
    PrimeFaces.widget.AccordionPanel.prototype.selectAll = function() {
        var $this = this;
        this.panels.each(function(index) {
            $this.select(index);
            if (!$this.cfg.multiple) {
                return false; // breaks
            }
        });
    };

    PrimeFaces.widget.AccordionPanel.prototype.unselectAll = function() {
        var $this = this;
        this.panels.each(function(index) {
            $this.unselect(index);
        });
    };
}