1

JSFのUIコンポーネントまたはそのサードパーティコンポーネントライブラリの1つを使用する場合、ライフサイクルのどこでこれらのタグの属性が開始されるかを説明するドキュメントを見つけるのに苦労することがよくあります。

使いたいとしましょう

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

また

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

valueChangeListenerJSFライフサイクルのどこで、、actionまたはがそれぞれ呼び出されるかに関する情報はどこにありますactionListenerか?

これらは単なる例であることを理解してください。メソッドがいつ呼び出されるかが正確にわからない場合は、各コンポーネントの属性ごとにStackOverflowにアクセスしないようにしています。

そのようなドキュメントが存在しない場合(??)、ケースバイケースでこれを理解するためにどのようなデバッグ手法を使用することをお勧めしますか?

4

1 に答える 1

1

標準のJSF属性に関しては、特にJSF仕様に情報があります。ドキュメントには、検証について2.5.1.3章で次のように記載されています。

変換された値はコンポーネントのsetValue()メソッドにプッシュされValueChangeEvent、値が変更された場合はaが発生します。

(したがって、変換/検証の終了とローカル値の設定によって発生します)

そして、アプリケーションアクションについての第7.3章の次のとおりです。

アプリケーションアクションは、Javaクラスでアプリケーションが提供するメソッドでActionEventあり、リクエスト処理ライフサイクルの[リクエスト値の適用]フェーズまたは[アプリケーションの呼び出し]フェーズのいずれかで発生したときに、アプリケーション指定の処理を実行します(ActionSourceインスタンスの直接のプロパティによって異なります)。イベントの開始)。

次の関連する質問も、それをよりよく理解するのに役立つ場合があります。

サードパーティのコンポーネントライブラリについては、タグのドキュメントまたはユーザーガイドをご覧ください。ただし、通常はカスタムイベントを使用せず、標準のJSFイベントまたは標準のajax / HTML DOMイベントの抽象化のみを使用します(したがって、最初にajax / HTMLの基本的な知識が必要です)。

デバッグに関しては、最も簡単なのは、呼び出されるメソッドにブレークポイントを設定し、呼び出しスタックやヒット順序を調べることです。Mojarraは、各フェーズで、のようなかなり自己文書化されたクラスを使用します。このクラスProcessValidationsPhaseは、後のどこかでコールスタックに明確に表示されますFacesServlet#service()。ログに記録/印刷しFacesContext#getCurrentPhaseId()たりThread#dumpStack()、ログのスタックトレースを呼び出して読み取ったり、関連するクラスを手動で参照したりすることもできます。

于 2013-03-26T15:43:44.700 に答える