1

我对 selectInputDate 有疑问:我有一个支持 bean,我将它绑定到 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 将当前日期设置为现在)

4

1 回答 1

2

valueChangeListener新提交的值与原始值不同时,它打算运行一些代码逻辑。但是您显然实际上对值的更改不感兴趣,您实际上对重置提交的值感兴趣。

只需摆脱valueChangeListener并在 bean 的 action 方法中做你的事情。

如果由于某种原因这不是一个选项,那么您需要详细说明您认为使用 avalueChangeListener是正确解决方案的问题。可能有一些变通方法来保留它valueChangeListener,例如调用FacesContext#renderResponse(),以便 JSF 不再运行update model values(和invoke action!)阶段,或者使用ValueChangeEvent#queue()它让它在invoke action阶段期间重新执行自身。

要了解更多关于 JSF 生命周期以及何时/为什么/如何调用/调用一个和另一个,您可能会发现这篇实用文章很有用。

于 2010-03-18T18:14:41.387 回答