2010-03-18 49 views
1

我有一個selectInputDate的問題: 我有一個支持bean,我綁定到selectInputDate ... 我有一個菜單,當菜單更改我將日期設置爲現在到相同的屬性selectInputDate被綁定到。JSF問題與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設置當前日期到現在)

回答

2

valueChangeListener的是打算每當新提交的值從原始值不同運行一些代碼邏輯。但你顯然實際上對價值的變化不感興趣,你實際上有興趣重新設置提交的價值。

只要擺脫valueChangeListener並在bean的操作方法中做你的事情。

如果由於某種原因,這不是一個選項,那麼您需要詳細說明您認爲使用valueChangeListener是正確的解決方案的問題。無論如何,可能會有一些解決方法來保留valueChangeListener,例如調用FacesContext#renderResponse(),以便JSF不會再運行update model values(和invoke action!)階段,或使用ValueChangeEvent#queue()invoke action階段使其重新執行。

要了解更多關於JSF生命週期以及何時/爲什麼/如何調用/調用其中一個的信息,您可能會發現this practical article有用。

+0

BalusC非常感謝所有的幫助。你真的幫助我增加了對JSF的理解。 我不確定在bean的操作方法中你的意思。我在icefaces中使用部分提交,並且我看不到如何在selectOneMenu中發生更改的情況下更改selectInputDate中的日期。感謝你的幫助。 – 2010-03-18 22:15:08

+0

「部分提交」是異步(ajax)提交。你在這個問題中沒有提到它。這會改變事情。但是,在'validations階段'(其中'valueChangeListener被調用)之後發生的'update model values'階段已經覆蓋了你手動設置的值。在你的情況下,我認爲只需調用'FacesContext#responseComplete()'就足夠了。 – BalusC 2010-03-18 22:35:49

+0

我應該使用valueChangeListener來做到這一點嗎? – 2010-03-19 10:41:00