Когда использовать valueChangeListener или F: ajax listener?


в чем разница между следующими двумя частями кода - в отношении listener размещение?

<h:selectOneMenu ...>
    <f:selectItems ... />
    <f:ajax listener="#{bean.listener}" />
</h:selectOneMenu>

и

<h:selectOneMenu ... valueChangeListener="#{bean.listener}">
    <f:selectItems ... />
</h:selectOneMenu>
2   78   2012-08-09 12:05:17

2 ответа:

The valueChangeListener будет вызываться только при отправке формы и представленное значение отличается от исходного значения. Таким образом, он не вызывается, когда только HTML DOM change событие. Если вы хотите отправить форму во время HTML DOM change событие, то вам нужно будет добавить еще один <f:ajax/> без слушателя(!) к входному компоненту. Это приведет к отправке формы, которая обрабатывает только текущий компонент (как в execute="@this").

<h:selectOneMenu value="#{bean.value}" valueChangeListener="#{bean.changeListener}">
    <f:selectItems ... />
    <f:ajax />
</h:selectOneMenu>

при использовании <f:ajax listener> вместо valueChangeListener, он будет по умолчанию выполняться во время HTML DOM change событие уже. Внутри UICommand компоненты и входные компоненты, представляющие флажок или radiobutton, он будет по умолчанию выполняться во время HTML DOM

для первого фрагмента (атрибут прослушивателя ajax):

атрибут "слушатель" тега ajax-это метод, который вызывается на стороне сервера каждый раз, когда функция ajax происходит на стороне клиента. Например, вы можете использовать этот атрибут для указания функции на стороне сервера для вызова каждый раз, когда пользователь нажимает клавишу

но второй фрагмент (valueChangeListener) :

ValueChangeListener будет вызываться только при отправке формы, а не при изменении значения входного сигнала

*вы можете посмотреть это удобная ответа