2016-11-15 40 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

相關問題