2016-11-15 3 views
0

Независимо от того, что я использую (jsf ajax, bootsfaces, primefaces), флажок вызывает метод bean во втором клике. Я провел много исследований, пытался использовать fixviewstate из всех, ничего не работает. Метод bean запускается только при втором щелчке, никогда не на первом. вот пример с primefaces:JSF checkbox вызывает 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> 

мои отступающие методы фасоли:

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

Форма была завернута в сапоги модальности, и по какой-либо причине метод bean запускается только во втором клике, так что он не обновляет форму. Теперь я использую официальный bootstrap modal, инициированный jquery, и он работает как ожидается при первом щелчке.

EDIT Теперь мой код выглядит следующим образом:

<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

Кроме того, ваш код выглядит немного запутанным, почему вы отрицаете 'morningActive' на событии ajax? Само изменившееся значение должно быть привязано к соответствующему значению компонента bean, когда это событие срабатывает. Обычно вам не нужно отрицать ценность самостоятельно. В настоящее время вы меняете это значение и мгновенно отменяете это изменение, отрицая его. – Zhedar

+0

Да, вы правы, я также удалил отрицание, так что утреннее значение задается событием щелчка на флажке. благодаря – Romf7890

Смежные вопросы