JSF Проблема с selectInputDate

У меня проблема с selectInputDate: у меня есть компонент поддержки, к которому я привязываю selectInputDate... У меня есть меню, в котором при изменении меню я устанавливаю дату на то же свойство, к которому привязан selectInputDate.

По какой-то причине дата меняется правильно, но selectInputDate затем вызывает набор и заменяет значение старым значением...

Любая идея, почему selectInputDate будет вызывать сеттер?

<ice:selectInputDate popupDateFormat="dd-MMM-yyyy" renderAsPopup="true" value="#{dateContoller.date}"/>

<ice:selectOneMenu value="#{dateContoller.dateRange}" valueChangeListener="#{dateRangeDateContoller.dateRangeChanged}"  >
....
</ice:selectOneMenu> 

(dateRangeChanged устанавливает текущую дату на настоящее время)

1 ответ

Решение

valueChangeListener намерен запускать некоторую логику кода всякий раз, когда вновь отправленное значение отличается от исходного значения. Но вы, очевидно, на самом деле не заинтересованы в изменении значения, вы на самом деле заинтересованы в сбросе отправленного значения.

Просто избавься от valueChangeListener и делай свое дело в методе действия бина.

Если по какой-то причине это не вариант, вам нужно подробнее рассказать о проблеме, для которой вы полагаете, что valueChangeListener это правильное решение. Там могут быть обходные пути, чтобы сохранить valueChangeListener в любом случае, например, вызов FacesContext#renderResponse() чтобы JSF не запускал update model values (а также invoke action!) фазы больше, или используя ValueChangeEvent#queue() чтобы позволить ему повторно выполнить во время invoke action фаза.

Чтобы узнать немного больше о жизненном цикле JSF и о том, когда / почему / как вызывается / вызывается то и другое, эта практическая статья может оказаться полезной.

Другие вопросы по тегам