valueChangeListener
не работает только на недавно измененном компоненте. Фактически, вы используете функцию JavaScript submit()
для отправки всей формы. valueChangeListener
всегда будет выполняться всякий раз, когда новое выбранное значение отличается от старого значения, как было объявлено в атрибуте value
.
Вы не объявили атрибут value
, поэтому его значение по умолчанию равно null
. Если выбранным по умолчанию элементом списка является , а не null
, то будет вызван valueChangeListener
.
Чтобы это исправить, вам нужно присвоить атрибут value
компоненту
<h:selectOneMenu value="#{careNeed.needsLevel}">
и необходимо предварительно заполнить его таким же значением в качестве значения по умолчанию раскрывающегося списка.
this.needsLevel = "not_assessed";
Кроме того, вы также можете сделать значение по умолчанию null
.
<f:selectItem itemValue="${null}" itemLabel="----Not assessed----"/>
Вне зависимости от проблемы, поскольку вы уже используете JSF 2.0, я бы предложил использовать <f:ajax>
для отправки только недавно измененного раскрывающегося списка с помощью аксиальных степеней вместо использования onchange="submit()"
для отправки всей формы. В конце концов, это лучше для пользователя.
<h:selectOneMenu>
<f:ajax />
</h:selectOneMenu>
Кроме того, метод valueChangeListener
не должен ничего возвращать. Это все равно будет проигнорировано. Просто объявите это void
.