【问题标题】:JSF checkbox calls bean method only on second clickJSF 复选框仅在第二次单击时调用 bean 方法
【发布时间】:2016-11-15 21:05:31
【问题描述】:

无论我使用什么(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 上

我做错了什么?谢谢

【问题讨论】:

  • 您是使用断点测试调用还是使用浏览器中的结果测试调用?您的侦听器将使用相同调用发送的值更改回之前的值。复选框为空,您点击,jquery 勾选该框,ajax 发送“true”,您的监听器将其更改为 false,即您点击之前的值....
  • Java EE 8 仍在进行中。

标签: jsf primefaces bootsfaces


【解决方案1】:

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

编辑 现在我的代码看起来像:

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

【讨论】:

  • 除此之外,你的代码看起来有点混乱,为什么你在ajax事件中否定morningActive?在触发该事件时,更改的值本身应该绑定到它的支持 bean 值。您通常不需要自己否定该值。目前,您更改该值并通过否定它立即撤消该更改。
  • 是的,你是对的,我也删除了否定,所以 MorningActive 值由复选框单击事件设置。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-23
  • 2021-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多