2010-03-18 32 views
1

真正的問題:有沒有辦法在初始頁面加載時清除所有組件的某些屬性?JSF 2 - 在頁面加載時清除組件屬性?

背景信息:

在我的申請,我有說話的一個服務層(服務層是由春豆是那些獲得注入到託管bean)一個JSF 2.0前端層。

服務層進行自己的驗證,並且使用我自己的驗證器類在前端圖層中進行相同的驗證,以嘗試避免代碼重複。這些驗證器類不是JSF驗證器,它們只是POJO。

我只對動作進行驗證,因此在動作方法中,我執行驗證,並且只有在有效時纔會調用服務層。我使用反射來設置UIComponent上的styleClass和title(所以如果UIComponent具有setStyleClass(:String)或setTitle(:String)方法,那麼我使用它們)。

這很好地工作,並在一個驗證錯誤,我看到一個很好的風格的文本框與彈出包含錯誤消息,如果我把鼠標懸停在它上面。但是,由於組件綁定到會話作用域的受管Bean,因此這些屬性似乎保持不變。所以如果我離開並回到同一頁面,styleClass和title仍然處於錯誤狀態。

有沒有辦法清除每個初始頁面加載的styleClass和title屬性?

感謝,

詹姆斯

附:我正在使用Action方法進行驗證,因爲我之前有過使用JSF 1.2及其驗證方法的一些問題,但不記得原因......所以這就是爲什麼我使用Action方法進行驗證的原因。

+0

我需要實現一個PhaseListener嗎?我可以清除他們的組件,我想從管理bean中清除它們,但是PhaseListener可以避免我必須爲每個組件手動執行它。我不會清理styleClass,只是刪除它的某個'錯誤'類,所以認爲這可能是一個可能的解決方案...是一個PhaseListener的方式去,以及它應該採取的行動,我假設第一階段 – jamiebarrow 2010-03-18 06:43:18

+0

[http://electrotek.wordpress.com/2008/01/28/jsf-error-fields-style/] [http://balusc.blogspot.com/2007/12/set-focus- in-jsf.html] – jamiebarrow 2010-03-18 06:54:44

回答

0

好了,所以我必須使用的PhaseListener,看到this blog entry by BalusCthis other blog entry,這就是做我在做什麼已經是一種更好的方式 - 設置的styleClass人工使用反射 - 它可以獲取所有組件與消息,並強調他們.. 。我會做同樣的事情,不過我認爲可以添加一個屬性,還沒有嘗試過。

+0

我需要訪問組件樹中的所有組件。 PhaseListener無法訪問它,所以使用ViewHandler ...效率不高。仍在努力尋找更好的解決方案。 – jamiebarrow 2010-03-23 14:12:18

相關問題