我的selectInputDate有问题: 我有一个支持bean,我绑定到selectInputDate ... 我有一个菜单,当菜单改变时,我将日期设置为selectInputDate绑定的相同属性。
由于某种原因,日期更改正确,但selectInputDate然后调用一个集合并使用旧值覆盖该值...
知道为什么selectInputDate会调用setter吗?
<ice:selectInputDate popupDateFormat="dd-MMM-yyyy" renderAsPopup="true" value="#{dateContoller.date}"/>
<ice:selectOneMenu value="#{dateContoller.dateRange}" valueChangeListener="#{dateRangeDateContoller.dateRangeChanged}" >
....
</ice:selectOneMenu>
(dateRangeChanged将当前日期设置为现在)
答案 0 :(得分:2)
只要新提交的值与原始值不同,valueChangeListener
就会运行一些代码逻辑。但是你显然对价值的变化不感兴趣,你实际上对重置提交的价值感兴趣。
摆脱valueChangeListener
并在bean的动作方法中做你的事。
如果出于某种原因这不是一个选项,那么您需要详细说明您认为使用valueChangeListener
是正确解决方案的问题。可能有一些解决方法可以保留valueChangeListener
,例如调用FacesContext#renderResponse()
,以便JSF不再运行update model values
(和invoke action
!)阶段,或者使用ValueChangeEvent#queue()
让它在invoke action
阶段重新执行。
要了解有关JSF生命周期的更多信息,以及何时/为何/如何调用/调用一个和另一个,您可能会发现this practical article有用。