2015-02-08 2 views
0

Может ли кто-нибудь сказать мне, почему метод valueChangeListener никогда не запускается?ValueChangeListener h: selectBooleanCheckbox никогда не вызывается

<h:form> 
    <h:selectBooleanCheckbox 
    value="#{reaCtrl.update}" 
    valueChangeListener="#{reaCtrl.updateC}" onclick="submit()"> 
    </h:selectBooleanCheckbox> 
    </h:form> 

Метод updateC выглядит следующим образом:

public void updateC(ValueChangeEvent event) { 
     System.out.println("testC"); 
} 

Thx

+0

как Знаете ли вы, что метод никогда не срабатывает ?! я попробовал ваш код и отлично работал! как вы объявили переменную обновления? – Tarik

+0

Текст «testC» не печатается. Обновление переменной \t private boolean. – Yassine

+0

Я только что проверил ваш код и его работу! Вы используете Tomcat? Wich version? Вы посмотрели в консоль? Добавьте свой xhtml и bean code. – Tarik

ответ

0

Ваш метод updateC будет вызван реализацией JSF после процесса проверки фазы, поэтому я думаю, что у вас есть некоторые другие ошибки проверки, которые приводят к тому, что ваш метод никогда не вызывается.

Вы можете разместить тег <h:messages/> в начале своей формы, чтобы отобразить все ошибки преобразования/проверки.

Однако, в случае, если вы хотите, чтобы обойти эту проверку, вы можете использовать атрибут immediate так:

<h:selectBooleanCheckbox 
value="#{reaCtrl.update}" immediate="true" 
valueChangeListener="#{reaCtrl.updateC}" onclick="submit()"> 
</h:selectBooleanCheckbox> 

Добавление этого атрибута будет срабатывать Значение Изменение событий после Применить Запрос значения фазы, что означает, что ваш метод updateC будет вызываться на этом этапе, после того, как метод xecutes вы должны пропустить на этапе вывода реагирования, так что вы должны изменить свой метод так:

public void updateC(ValueChangeEvent event) { 
     System.out.println("testC"); 
     FacesContext context = FacesContext.getCurrentInstance(); 
     context.renderResponse(); 
} 
Смежные вопросы