1

我只想动态启用或禁用单个选项卡(而不是整个手风琴面板)。我尝试了以下方法,这是我的代码:

索引.xhtml

<p:accordionPanel id="accordionPanelId" widgetVar="accordionPanelWidget">
   <p:tab id="tab1" title="First Tab">
       <h:outputText value="Contents of Tab1"/>
       <h:form>
         <p:commandButton value="Enable Tab2" action="#{tabBean.buttonAction}" update=":accordionPanelId:tab2"/>
       </h:form>
   </p:tab>

   <p:tab id="tab2" title="Second Tab" disabled="#{tableBean.disableTab}">
      <h:outputText value="Contents of Tab2"/> 
   </p:tab>
</p:accordionPanel>

TabBean.java

@ManagedBean
@ViewScoped
public class TabBean implements Serializable {

    private boolean disableTab=true;

    public boolean isDisableTab() {
        return disableTab;
    }

    public void setDisableTab(boolean disableTab) {
        this.disableTab = disableTab;
    }

    public void buttonAction()
    {
        disableTab = false;
    }

}

使用上述方法,Tab2 的内容正在显示,但 Tab Header 仍然冻结,可能这不是实现此目的的神方法...请提出任何其他方法或更改此方法。

编辑:如果我按如下方式更新整个 Accordion 面板,上述方法可以正常工作:

<p:commandButton value="Enable Tab2" action="#{tabBean.buttonAction}" update=":accordionPanelId"/>

但我不想更新所有选项卡。

4

2 回答 2

0

您需要将disabled选项卡的属性绑定到disableTab您将在服务器端切换的支持 bean 变量。为了反映您在服务器端所做的更改,您可以<p:accordionPanel/>在客户端进行 ajax-update。使用您当前的设置,您需要做的唯一更改是:

  1. 将属性绑定disabled到您设置的支持 bean 变量

       <p:tab id="tab2" title="Second Tab" disabled="#{tabBean.disableTab}">
           <h:outputText value="Contents of Tab2"/> 
       </p:tab>
    
  2. 使用 javascript API 启用后自动切换到选项卡

       <p:tab id="tab1" title="First Tab">
          <h:outputText value="Contents of Tab1"/>
             <h:form>
               <p:commandButton value="Enable Tab2" oncomplete="accordionPanelWidget.select(2)" action="#{tabBean.buttonAction}" update=":accordionPanelId:tab2"/>
            </h:form>
       </p:tab>
    
于 2013-04-23T00:42:01.643 回答
-1

您必须更新所有手风琴面板才能启用/禁用选项卡。在这种情况下,您必须更新手风琴PanelId。但是,您可以在手风琴面板中使用 dynamic="true" 属性来避免更新未呈现的部分。

于 2017-02-06T08:39:19.290 回答