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 и о том, когда / почему / как вызывается / вызывается то и другое, эта практическая статья может оказаться полезной.