Почему мой f: ajax не работает с h: selectOneMenu?

#ajax #jsf-2

#ajax #jsf-2

Вопрос:

Использование JSF 2.0, Glassfish 3.2, Primefaces 2.2.1

У меня есть страница с несколькими составными компонентами. В одном из этих компонентов у меня есть h:selectOneMenu. Я пытаюсь добавить f:ajax для вызова метода при выборе нового значения.

Вот как выглядит компонент h:selectOneMenu на странице:

 <h:selectOneMenu id="selectRmDD" styleClass="editSelectRmDD" value="#{scheduleEditSessionBean.selectedRoom}" >
    <f:selectItems id="roomList" value="#{scheduleEditSessionBean.roomList}"/>
    <f:ajax listener="#{scheduleEditSessionBean.selectRmDD_processValueChange}" event="valueChange" render="@form" />
 </h:selectOneMenu>
  

Когда я выбираю новый элемент из h:selectOneMenu, вызывается функция прослушивателя, но значение в selectedRoom равно null . Я также рассмотрел это в отладчике, и даже значение submittedValue для компонента в AjaxBehaviorEvent также равно null. Вот метод, который вызывается при выборе нового значения, и определение для selectedRoom:

  public void selectRmDD_processValueChange( AjaxBehaviorEvent ae) {
    String s = getSelectedRoom();
    System.out.println( "Selected room = " s );
    if( s != null )applyRoomBtn_action();
 }

private String selectedRoom = "1";
public String getSelectedRoom() { return this.selectedRoom; }
public void setSelectedRoom(String s) { this.selectedRoom = s; }
  

Есть идеи, почему значение не заполняется?

Спасибо.

Ответ №1:

Это произойдет, когда значение SelectItem roomList has null или пустой строки в качестве значения в момент отправки формы будет обработано. Никаких других причин на ум не приходит, ожидайте, что, возможно, a Converter для String.class которого не выполняет свою работу должным образом, но это должно было повлиять на все входные данные, которые привязаны к String свойству.