JSF复选框仅在第二次单击时调用bean方法

时间:2016-11-15 21:05:32

标签: jsf primefaces bootsfaces

无论我使用什么(jsf ajax,bootsfaces,primefaces),复选框都会在第二次单击时调用bean方法。我做了很多研究,尝试使用omnifaces的fixviewstate,没有任何效果。 bean方法仅在第二次单击时触发,从不在第一次触发。 这是一个带有primefaces的例子:

<h:form id="myformexample">
                    <b:row>
                        <b:column colSm="12">
                            <p:selectBooleanCheckbox id="value2zz" value="#{selectedEmployeeDayBean.morningActive}">
                                <p:ajax update="mypane" listener="#{selectedEmployeeDayBean.clickMorning()}" />
                            </p:selectBooleanCheckbox>

                        </b:column>
                    </b:row>

                    <h:panelGroup id="mypane">
                        <b:row>
                            <b:column colSm="12">
                                <h:outputText value="#{selectedEmployeeDayBean.morningActive}"/>
                            </b:column>
                        </b:row>
                    </h:panelGroup>

                </h:form>

我的支持bean方法:

 public boolean isMorningActive() {
        return morningActive;
}

public void setMorningActive(boolean morningActive) {
    this.morningActive = morningActive;
}

 public void clickMorning(){
    this.morningActive = !this.morningActive;
}

我使用JSF 2.2和javaEE8,primefaces6.0 bootsfaces1.0,部署在wildfly(jboss)10.0上

我做错了什么?感谢

1 个答案:

答案 0 :(得分:0)

表单被包装到bootsfaces模式中,并且由于任何原因,bean方法仅在第二次单击时触发,因此它不会更新表单。现在我使用由jquery触发的官方bootstrap模式,它在第一次点击时按预期工作。

修改 现在我的代码看起来像:

<h:form id="myformexample">
                    <b:row>
                        <b:column colSm="12">
                           <h:selectBooleanCheckbox value="#{selectedEmployeeDayBean.morningActive}"                                                       id="checkmorning">
                                        <f:ajax event="click" render="mypane" execute="@this"/>
                           </h:selectBooleanCheckbox>

                        </b:column>
                    </b:row>

                    <h:panelGroup id="mypane">
                        <b:row>
                            <b:column colSm="12">
                                <h:outputText value="#{selectedEmployeeDayBean.morningActive}"/>
                            </b:column>
                        </b:row>
                    </h:panelGroup>

</h:form>