JSF valuechangelistener не вызывается при отправке формы - PullRequest
4 голосов
/ 23 января 2012

Я посмотрел другие похожие посты, но ни один из них не помог.Вот мой код:

<script  type="text/javascript">
function submit1()
{
document.forms["form"].submit();
}
</script>

<form name="form">
    <h:selectOneMenu value="#{bean.categorySelected}" onchange="submit1()"
valueChangeListener="#{bean.changeCategory}">
    <f:selectItem itemLabel="Select a Category" itemValue="null" />
    <f:selectItems value="#{bean.items}" />
</h:selectOneMenu>
</form>

Когда я выбираю из выпадающего списка, он только перезагружает компонент.Это означает, что вызывается bean.getItems, но не значение или значениеChangeListener. Мои журналы показывают, что он прошел только фазы 1 и 6 фазы. Если я правильно помню, фаза 2-5 не запускается, если форма не отправлена.Что я делаю не так?

1 Ответ

3 голосов
/ 23 января 2012

Вам нужен полноценный компонент 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 знать, с каким представлением он имеет дело и какую форму он должен обрабатывать, какие слушатели и какое действие он должен вызывать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...