Вам нужен полноценный компонент JSF <h:form>
вместо простого элемента HTML <form>
.Простой элемент HTML <form>
без каких-либо атрибутов method
и action
запускает при отправке по умолчанию запрос GET для текущего URL.Это точно подтверждает поведение, которое вы видите.Это как если бы вы просто обновляли запрашиваемую в данный момент страницу с помощью F5.
Итак, исправьте это следующим образом:
<h:form>
<h:selectOneMenu value="#{bean.categorySelected}" onchange="this.form.submit()" valueChangeListener="#{bean.changeCategory}">
<f:selectItem itemLabel="Select a Category" itemValue="null" />
<f:selectItems value="#{bean.items}" />
</h:selectOneMenu>
</h:form>
(обратите внимание, что дополнительная функция JS не нужна)
<h:form>
сгенерирует <form method="post">
вместе с по крайней мере двумя специфическими для JSF скрытыми полями ввода, идентифицирующими текущую форму и состояние просмотра (проверьте разницу в сгенерированном выводе HTML после исправлениякод JSF).Комбинация запроса POST и двух скрытых полей позволяет JSF знать, с каким представлением он имеет дело и какую форму он должен обрабатывать, какие слушатели и какое действие он должен вызывать.