动态禁用/启用P的:P中标签:accordionPanel

问题描述 投票:1回答:2

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

的index.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>

tab bean.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的内容被显示,但选项卡标题仍然冻结,可能这是不是神的方法来实现这一目标?请建议在这种方法中任何其他方式或变更。

编辑:上述方法是工作的罚款,如果我更新整个手风琴面板如下:

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

但我不希望更新所有选项卡。

jsf primefaces
2个回答
0
投票

您需要将标签的disabled属性绑定到disableTab支持bean变量,你会在服务器端进行切换。为了反映您在服务器端所做的更改,你再Ajax的更新客户端的<p:accordionPanel/>。使用您当前的设置,只有你需要做的是改变:

  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>

-1
投票

你必须更新所有accordionPanel以启用/禁用标签。在这种情况下,你必须更新accordionPanelId。但是,您可以使用动态=“true”属性在accordionPanel避免更新未呈现的部分。

© www.soinside.com 2019 - 2024. All rights reserved.