2011-08-19 43 views
1

在JSF頁面上有兩個依賴下拉列表正常工作。我在第一個下拉列表中使用了一個valueChangeListener,該列表填充了第二個下拉列表的列表。JSF中的依賴下拉列表失敗驗證

但是,當我嘗試提交表單時,它失敗了JSF驗證。從測試我認爲問題是,當頁面加載我的依賴下拉列表是空的,然後我第一個下拉列表中選擇後填充它。但是,當頁面加載時,依賴列表中現在沒有任何值在列表中,因此驗證失敗。我已經通過使用構造函數在頁面加載時設置具有所有可能值的列表來確認此事,並且它使我的問題消失,但這不是一種可行的解決方案,因爲加載所有值會導致我的頁面性能下降。

任何想法如何讓它工作?

Regards, Kevin。

回答

2

這完全是視圖範圍的bean的用例。在這種情況下使用請求作用域bean會違反JSF的粒度(可能,但很痛苦 - 就像使用刺蝟作爲沐浴海綿一樣)。

如果這些解決方案有任何問題,請告訴我們,應該有一種方法來緩解它們;問題是,你應該使用視圖範圍並解決你可能遇到的任何問題,而不是試圖逃避它。

+0

是的這解決了我的問題。我將範圍從請求改爲查看。我是使用JSF的新手,所以仍然需要我的頭腦。我仍然不確定爲什麼View範圍工作和Request範圍失敗? – kevfuzz

+0

@kevfuzz:一個普通的JSF請求會執行兩件事:首先它重建web接口,因爲它在前一個請求之後,然後它應用請求帶來的任何更改(否則您的valueChangeListener將不起作用),然後呈現更改後的接口。使用請求作用域bean時,第一階段將失敗:JSF將嘗試重建指向某些不再可用的任意值的下拉列表。只要你留在同一頁面上並使用POST,視圖範圍的bean就會存活,所以值就在那裏。順便說一句:不要在構造函數中做任何事情。 – fdreger

+0

感謝您的信息。 – kevfuzz