2016-11-15 87 views
0

无论我使用什么(jsf ajax,bootsfaces,primefaces),复选框都会在第二次单击时调用bean方法。我做了很多研究,试图从omnifaces中使用fixviewstate,没有任何工作。只有第二次点击才会触发bean方法,而不是第一次。 这里是primefaces一个例子:JSF复选框仅在第二次点击时调用bean方法

<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

我该怎么做?谢谢

+0

你测试用的断点或结果在浏览器中调用? 您的监听器将使用同一回调发送的值更改为以前的值。复选框为空,您单击,jquery选中框,ajax发送“true”,并且您的监听器将其更改为false,单击前的值。 – Holger

+0

Java EE 8仍在进行中。 – Tiny

回答

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

除此之外,你的代码看起来有点混乱,为什么你在ajax事件上否定'morningActive'?当事件触发时,更改的值本身应该绑定到支持bean的值。你通常不需要自己否定价值。目前,您可以更改该值,并通过否定该值立即撤销该更改。 – Zhedar

+0

是的,你是对的,我删除了否定,所以morningActive值由复选框单击事件设置。谢谢 – Romf7890