3

私はいくつかの信頼できる情報源に相談しましたが、それらは互いに矛盾しているのか、誤解しているのか、あるいは複数の変換が行われている可能性がありますか? JSF の 1.x バージョンと 2.x バージョンに違いはありますか?

このIBM の投稿では、変換は要求値の適用フェーズ(フェーズ 2) で行われると記載されています。

BalusC によるこの投稿では、デフォルトの変換はプロセス検証フェーズ(フェーズ 3)で行われると述べています。

Oracle JEE6 チュートリアルでは、モデル値の更新フェーズ(フェーズ 4) で変換が行われることを暗示しており、このフェーズの説明で次のように述べています。

ローカル データを Bean プロパティで指定された型に変換できない場合。

一方、同じチュートリアルのフェーズを示す図は、プロセス検証フェーズモデル値更新フェーズの両方から発生する変換エラーを示しています。

上記の投稿はすべて、immediate属性が true に設定されている場合、すべての変換と検証がApply request フェーズで処理されることを示しています。これは、そのフェーズでの変換がデフォルトの動作ではないことを意味します。

ありがとうございました

4

1 に答える 1

2

UIInputのドキュメントから[強調鉱山]:

リクエスト処理ライフサイクルのApply Request Valuesフェーズで、このコンポーネントのデコードされた値 (通常は文字列である必要はありません) は、setSubmittedValue() を使用して保存する必要がありますが、まだ変換する必要はありません。コンポーネントが特定の値が送信されなかったことを示したい場合は、何もしないか、送信された値を null に設定できます。

デフォルトでは、リクエスト処理ライフサイクルのプロセス バリデーター フェーズで、送信された値がタイプセーフなオブジェクトに変換され、検証が成功すると、setValue() を使用してローカル値として保存されます。ただし、immediate プロパティが true に設定されている場合、この処理は代わりに Apply Request Values フェーズの最後に発生します。

リクエスト処理ライフサイクルの Render Response フェーズで、UIOutput と同様に出力の変換が行われます。JSF 1.x と 2.x のバージョンに違いはありません。

于 2012-10-11T10:37:23.060 に答える