Здесь есть две потенциальные проблемы:
Сначала onchange="submit()"
отправляет всю форму.valueChangeListener
будет вызываться для всех элементов ввода, значение представленных которых отличается от значения initial .
Необходимо выполнить предварительную настройкузначение позади #{entitiy.level}
с тем же значением, что и опция меню по умолчанию.Например, в конструкторе.
public Entity() {
level = "-";
}
Или, что лучше, задайте значение по умолчанию null
.
<f:selectItem itemValue="#{null}" itemLabel="-" />
, чтобы valueChangeListener
не вызывалось, когда конкретное менюне изменяется.
Или, если вы уже пользуетесь JSF 2.x (пожалуйста, всегда указывайте точную версию / версию JSF в своих вопросах JSF), вы можете использовать для этого тег <f:ajax>
без необходимостиvalueChangeListener
с взломом onchange="submit()"
.
Во-вторых, вам нужно убедиться, что значение #{someHandler.entities}
, в котором можно датировать, возвращает точно тот же список во время отправки, каким он был во времяначальный запрос.Итак, загрузите данные в конструкторе bean (post).В JSF 2.x вы также хотели бы поместить компонент в область просмотра.
Не имеет отношения к конкретной проблеме , вместо этого вы можете просто использовать <h:selectOneMenu>
<h:selectOneListbox size="1">
.