2011-12-21 107 views
3

我正在使用Primefaces 2.2。我有p:tabView里面有三个选项卡。 Tab1包含一个布尔值复选框。现在我想要当用户点击tab1中的复选框时,然后选项卡2变为禁用。我该怎么做?这里是代码预览。如何在复选框选择上禁用PrimeFaces选项卡

<h:body> 

    <p:panel header="F.C. Barcelona" footer="Visca el Barca!"> 

     <p:tabView> 

      <p:tab id="tab1" title="Godfather Part I"> 
       <h:panelGrid columns="2" cellpadding="10"> 
        <h:outputText value="In tab1." /> 
       </h:panelGrid> 

       <h:selectBooleanCheckbox id="Mark" 
             value="#{disableTag.disable}" > 
        <f:ajax render="tab2" /> 
       </h:selectBooleanCheckbox> 

      </p:tab> 

      <p:tab id="tab2" title="Godfather Part II"> 
       <h:panelGrid columns="2" cellpadding="10"> 

        <h:outputText value="In tab2." /> 
       </h:panelGrid> 
      </p:tab> 

      <p:tab id="tab3" title="Godfather Part III"> 
       <h:panelGrid columns="2" cellpadding="10"> 

        <h:outputText value="In tab3." /> 
       </h:panelGrid> 
      </p:tab> 

     </p:tabView> 

    </p:panel> 

</h:body> 

感谢

回答

1
<h:form id="myFormId">  
    <p:panel header="F.C. Barcelona" footer="Visca el Barca!"> 

     <p:tabView> 

      <p:tab id="tab1" title="Godfather Part I" disabled="#{myBean.myBooleanFirstTabDisable}"> 
       <h:panelGrid columns="2" cellpadding="10"> 
        <h:outputText value="In tab1." /> 
       </h:panelGrid> 

       <h:selectBooleanCheckbox id="Mark" 
             value="#{disableTag.disable}" > 
        <p:ajax event="check" update="myFormId" listener="#{myBean.myMethodEvaluatingDisabledTabs}" /> 
       </h:selectBooleanCheckbox> 

      </p:tab> 

      <p:tab id="tab2" title="Godfather Part II" disabled="#{myBean.myBooleanSecondTabDisable}"> 
       <h:panelGrid columns="2" cellpadding="10"> 

        <h:outputText value="In tab2." /> 
       </h:panelGrid> 
      </p:tab> 

      <p:tab id="tab3" title="Godfather Part III" disabled="#{myBean.myBooleanThirdTabDisable}"> 
       <h:panelGrid columns="2" cellpadding="10"> 

        <h:outputText value="In tab3." /> 
       </h:panelGrid> 
      </p:tab> 

     </p:tabView> 

    </p:panel> 
</h:form> 

所以,你必须有一个表单组件,正如你可以看到你可以用......的方法/监听myMethodEvaluatingDisabledTabs用于改变布尔primefaces Ajax和更新属性值在每个选项卡中使用disabled属性:因此,您需要为每个选项卡更改为disabled=true(在这种情况下,您将有3个布尔变量),然后更新整个表单。

PS:我要检查有关AJAX事件....

+0

我正在使用PrimeFaces 2.2。 p:中没有禁用属性 – Basit 2011-12-21 11:15:31

+0

@Basit aaa ...你是对的,我忘了! – spauny 2011-12-21 11:20:51

+0

@Basit所以你不能禁用它们......你只能将渲染设置为false,而不会显示它们 – spauny 2011-12-21 11:21:59

1

在这里,我是如何做到的。

<h:head> 
    <title>Facelet Title</title> 
</h:head> 
<h:body> 
    <h:form> 

     <p:panel id="myPanel" header="F.C. Barcelona" footer="Visca el Barca!"> 

      <p:tabView id="myTabView" tabChangeListener="#{disableTag.onChange}" > 

       <p:tab id="tab1" title="Godfather Part I"> 
        <h:panelGrid columns="2" cellpadding="10"> 
         <p:panel header="Basit" footer="Basit"> 


         </p:panel> 
         <h:outputText value="In tab1." /> 
        </h:panelGrid> 

        <h:outputText value="Click to hideGodfather Part II " /> 
        <h:selectBooleanCheckbox id="Mark" 
              value="#{disableTag.disable}" 
              valueChangeListener="#{disableTag.changeMark}"> 
         <f:ajax render="@this myTabView" /> 
        </h:selectBooleanCheckbox> 

       </p:tab> 

       <p:tab id="tab2" 
         title="Godfather Part II" 
         rendered="#{disableTag.rendered}"> 
        <h:panelGrid columns="2" cellpadding="10"> 

         <h:outputText value="In tab2." /> 
        </h:panelGrid> 
       </p:tab> 

       <p:tab id="tab3" title="Godfather Part III"> 
        <h:panelGrid columns="2" cellpadding="10"> 

         <h:outputText value="In tab3." /> 
        </h:panelGrid> 
       </p:tab> 

      </p:tabView> 

     </p:panel> 

    </h:form> 

</h:body> 

@ManagedBean 
@ViewScoped 
public class DisableTag implements Serializable { 

    private boolean disable; 
    private boolean rendered; 

    /** Creates a new instance of DisableTag */ 
    public DisableTag() { 

     rendered = false; 

    } //end of constructor 

    public boolean isDisable() { 
     return disable; 
    } 

    public void setDisable(boolean disable) { 
     this.disable = disable; 
    } 

    public boolean isRendered() { 
     return rendered; 
    } 

    public void setRendered(boolean rendered) { 
     this.rendered = rendered; 
    } 

    public void changeMark(ValueChangeEvent vcEvent){ 

     rendered = Boolean.valueOf(vcEvent.getNewValue().toString()).booleanValue(); 
     System.out.println(); 

    } 

} //end of class DisableTag