【问题标题】:How to disable PrimeFaces tab on checkbox selection如何在复选框选择上禁用 PrimeFaces 选项卡
【发布时间】:2011-12-21 10:49:55
【问题描述】:

我正在使用 Primefaces 2.2。我有 p:tabView 里面有三个标签。 Tab1 包含一个布尔复选框。现在我希望当用户单击 tab1 中的复选框时,tab 2 变为禁用。我该怎么做?这是代码预览。

<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>

谢谢

【问题讨论】:

    标签: jsf-2 primefaces


    【解决方案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>
    

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

    PS:我必须检查那个 ajax 事件......

    【讨论】:

    • 我使用的是 PrimeFaces 2.2。 p:tab 中没有 disable 属性
    • @Basit 所以你不能禁用它们......你只能将渲染设置为false,而不显示它们
    • 现在呢?有没有办法在 Prime Faces 2.2 中实现它。谢谢
    • 我做到了。我隐藏了标签而不是禁用,正如你所说我不能禁用它们......我明天将提交答案。我现在提交答案的声誉较低:(。无论如何感谢 Spauny :)
    • @Basit 是的,就像我说的,你使用了 render=false,不是吗?
    【解决方案2】:

    我是怎么做到的。

     <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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-04
      • 1970-01-01
      • 2013-10-29
      相关资源
      最近更新 更多