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

izkcnapc  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(397)

我在primefaces对话框中有一个primefaces accordion 面板,每当对话框(dialog is dynamic=“true”)打开时, accordion 面板的所有面板都会折叠。
accordionpanel有一个特性,它可以有0到2个面板,直到用户单击菜单项时才知道这一点。这些面板的存在与否取决于backingbean中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>

我试过下列方法,但都没有达到预期的效果
在打开/关闭对话框之前,请在js/jquery中选择一个负数、null或无效索引

PF('accordionPanelWV').select(-1);
PF('accordionPanelWV').select(null);
PF('accordionPanelWV').select("");

在打开/关闭对话框之前,取消选择js/jquery中的所有索引

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

我该怎么做?
primefaces 8.0版
谢谢

uqdfh47h

uqdfh47h1#

这将在pf 9.0中固定:https://github.com/primefaces/primefaces/issues/6605
添加 selectAll 以及 unselectAll 方法展开或折叠所有面板,只需将此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);
        });
    };
}

相关问题