Jsf 如何折叠或展开页面上的所有RichFaces可折叠面板元素?

Jsf 如何折叠或展开页面上的所有RichFaces可折叠面板元素?,jsf,richfaces,Jsf,Richfaces,我正在使用RichFaces和JSF开发一个简单的应用程序。此应用程序的一个页面包含多个可折叠面板元素。某些可折叠面板元素是嵌套的,但不会超过第二层 我想在页面上提供链接或按钮,以展开和折叠页面上的所有可折叠面板元素。我该怎么做 元素当前使用switchType=client属性让客户端处理展开和折叠。我怀疑改用ajax可能会有所帮助,但我不确定也不知道如何利用它 更新:我的问题可能更容易理解,如果我包括一个我正在尝试做的例子: <h:form> <a4j:commandB

我正在使用RichFaces和JSF开发一个简单的应用程序。此应用程序的一个页面包含多个可折叠面板元素。某些可折叠面板元素是嵌套的,但不会超过第二层

我想在页面上提供链接或按钮,以展开和折叠页面上的所有可折叠面板元素。我该怎么做

元素当前使用switchType=client属性让客户端处理展开和折叠。我怀疑改用ajax可能会有所帮助,但我不确定也不知道如何利用它

更新:我的问题可能更容易理解,如果我包括一个我正在尝试做的例子:

<h:form>
  <a4j:commandButton actionListener="#{bean.setDefaultExpanded(true)}"
                render="reportPanel" value="Expand all" />
  <a4j:commandButton actionListener="#{bean.setDefaultExpanded(false)}"
                render="reportPanel" value="Collapse all" />

  <h:panelGrid id="reportPanel">
    <ui:repeat var="account" value="#{bean.results.entrySet().toArray()}">
      <rich:collapsiblePanel expanded="#{bean.defaultExpanded}">
        <ui:repeat var="chargeGroup" value="#{account.value.entrySet().toArray()}">
          <rich:collapsiblePanel expanded="#{bean.defaultExpanded}">
            <h:outputText value="content: #{chargeGroup.value}" />
          </rich:collapsiblePanel>
        </ui:repeat>
      </rich:collapsiblePanel>
    </ui:repeat>
  </h:panelGrid>
</h:form>
具有扩展属性,您可以将其绑定到bean属性并从那里控制扩展。像这样的

<rich:collapsiblePanel id="panel1" expanded="#{bean.expanded}" …>

<a4j:commandButton actionListener="#{bean.togglePanels()}" 
    … render="panel1, panel2, …"/>

switchType控制内容从何处提取,而不是如何展开/折叠面板。

单击单个面板然后展开/折叠所有面板时,我也遇到了同样的问题。我的这项工作是richfaces 4.2.3:

<h:commandButton  immediate="true" action="#{controllerBean.toggleMin}"  value="collapse all" >
    <a4j:ajax render="panel1 panel2"></a4j:ajax>
</h:commandButton>
<h:commandButton immediate="true" action="#{controllerBean.toggleMax}" value="expand all">
    <a4j:ajax render="panel1 panel2"></a4j:ajax>
</h:commandButton>
...
<rich:collapsiblePanel id="panel1" immediate="true" expanded="#{modelBean.expanded}" header="Title text" switchType="client">
    ...
</rich:collapsiblePanel>
...

谢谢,这给了我一个开始的地方。我没有列出所有ID,而是将所有rich:CollapsablePanel元素包装在一个h:panelGrid中并使用其ID。我还删除了switchType属性,因此面板将默认为ajax类型。直到我意识到现在所有的面板都必须具有相同的扩展状态,它似乎工作得很好。我想我没有很好地解释这个问题。我的意思是让用户能够展开/折叠任何面板,使用这些按钮可以展开/折叠所有面板。这是否意味着我需要保留每个面板的状态?我想我不明白。您有几个面板-一些展开,一些折叠-单击按钮。您希望发生什么?如果我们希望看到所有可折叠面板打开或关闭,您提供的解决方案非常有效。但是,我发现,当我单击几个单独的面板打开,然后单击commandButton将它们全部打开,然后尝试单击几个关闭的面板时,bean中面板的状态开始与UI中的视觉状态不同步。当这种情况发生时,有时点击按钮来展开它们都没有任何作用。我原以为按钮会把它们全都打开,但没有发生。在这一点上,如果我关闭一些打开的面板,然后单击按钮,那么它可能会工作。