2013-03-25 15 views
1

通常當使用JSF的UI組件或其第三方組件庫之一時,我很難找到解釋哪裏在生命週期這些標籤的屬性將在踢。我在哪裏可以找到關於每個JSF組件如何與頁面生命週期交互的解釋/文檔

比方說,我想用

<h:selectOneMenu valueChangeListener="#{myBean.myMethod1}" ... /> 

<h:commandButton action="#{myBean.myMethod2}" actionListener="#{myBean.myMethod3}" ... /> 

在哪裏可以找到資料,請在JSF生命週期的哪個地方分別調用valueChangeListeneractionactionListener

請理解這些僅僅是例子。我試圖避免來到每個組件的每個屬性的StackOverflow,當我不明白它的方法何時會被調用。

如果這樣的文檔不存在(??),你會建議使用什麼調試技術來逐案解決這個問題?

+1

你的問題有點含糊不清,但一個好的開始將會是[JSF PhaseListeners](http://softwareengineeringsolutions.com/thoughts/frameworks/JSF.Techniques-PhaseListeners.htm),它基本上幫助你跟蹤JSF請求相對於組件的生命週期 – kolossus 2013-03-26 03:39:33

+0

我編輯它並希望它更清晰。如果沒有,請讓我知道你發現不清楚。也許我可以改進它。 – Chris 2013-03-26 15:22:58

回答

1

至於標準的JSF屬性,你可以找到JSF specification等信息。所述文檔狀態在章節2.5.1.3以下有關驗證:

轉換後的值推入到組件的的setValue()方法,並且如果該值已經改變了ValueChangeEvent進行燒成。

(因此,它是由轉換/驗證和本地值設定結束時觸發)和第7.3章有關應用程序的操作如下:

應用動作是應用程序提供的方法,用於在請求處理生命週期的「應用請求值」或「調用應用程序」階段期間發生ActionEvent時執行某些應用程序指定的處理(取決於A的直接屬性ctionSource實例啓動 事件)。

以下相關的問題也可能是更好的理解有幫助的:

至於第三方組件庫,看看它的標籤文檔或用戶指南。但通常他們不使用自定義事件,而只使用標準的JSF事件或標準ajax/HTML DOM事件的抽象(因此需要有基本的ajax/HTML知識才能開始)。

至於調試,最簡單的方法是在被調用的方法中放置一個斷點,然後查看調用堆棧和/或命中順序。 Mojarra爲每個階段使用一個漂亮的自我記錄類,如ProcessValidationsPhase,它應該清楚地顯示在FacesServlet#service()之後的某個地方的調用堆棧中。您也可以登錄/打印FacesContext#getCurrentPhaseId()甚至撥打Thread#dumpStack()並在日誌中讀取堆棧跟蹤並手動瀏覽關聯的類。

+0

謝謝。這正是我所尋找的信息。但是,考慮到您的答案,我還假定沒有更簡單的方法來獲取這些信息,即使您認爲這將是首要記錄。答案並不總是直觀的。我可能會從你的調試建議開始,這聽起來非常有用!正如內聯和參考解釋一樣! – Chris 2013-03-26 16:18:04

+0

什麼時候你要在JSF,BalusC上發佈一本書?看起來,您對API +實現的掌握以及作爲JSF開發人員的經驗,您可以輕鬆撰寫關於該主題的書籍,不是嗎? – Chris 2013-03-26 16:26:01

+0

不客氣。至於這本書,也許以後。你到目前爲止不是第一個問那個問題的人。 – BalusC 2013-03-26 16:32:59

相關問題