Итак, у меня есть следующий код:
<h:inputText value = "#{listAllBookings.searchText}">
<f:ajax listener = "#{listAllBookings.printValues()}" event = "keyup" render = "myTable"/>
</h:inputText>
<h:selectOneMenu value = "#{listAllBookings.selectedAttr}">
<f:selectItem itemLabel = "GUEST" itemValue = "GUEST"/>
<f:selectItem itemLabel = "HOTEL" itemValue = "HOTEL"/>
</h:selectOneMenu>
И мой метод printValues:
public void printValues() {
System.out.println("searchText:" + searchText + " and selectedAttr: " + selectedAttr);
}
Итак, как вы можете видеть, приведенный выше код довольно прост. Проблема в том, что я не могу изменить значение selectedAttr. Я уже проверил, есть ли у меня соответствующие методы получения и установки. Значение selectedAttr остается нулевым, а значение searchText изменяется.
Текущий вывод выглядит следующим образом:





попробуй это:
<h:selectOneMenu value = "#{listAllBookings.selectedAttr}">
<f:ajax event = "change" listener = "#{listAllBookings.printValues()}" />
<f:selectItem itemLabel = "GUEST" itemValue = "GUEST"/>
<f:selectItem itemLabel = "HOTEL" itemValue = "HOTEL"/>
</h:selectOneMenu>
Насколько нам известно, ОП не использует PrimeFaces.
Вы не указали компонент для выполнения с вашими ajax запросами. Таким образом, выполняется только текстовое поле.
Добавьте id к selectOneMenu и выполните его:
<h:inputText value = "#{listAllBookings.searchText}">
<f:ajax listener = "#{listAllBookings.printValues()}" event = "keyup" render = "myTable"
execute = "@this selectSomething"/>
</h:inputText>
<h:selectOneMenu id = "selectSomething" value = "#{listAllBookings.selectedAttr}">
<f:selectItem itemLabel = "GUEST" itemValue = "GUEST"/>
<f:selectItem itemLabel = "HOTEL" itemValue = "HOTEL"/>
</h:selectOneMenu>
Но вы также можете выполнить окружающую форму через execute = "@form"
Смотрите также
Возможный дубликат Понимание процесса/обновления PrimeFaces и атрибутов выполнения/рендеринга JSF f:ajax