ビューの復元段階で UI コンポーネント ツリーに保存されているものを確認するにはどうすればよいですか? フォームの値 (フォームの入力フィールドの値など) は、ビューの復元フェーズでどこに保存されますか? そして、モデルオブジェクトに保存する前に、UIコンポーネントツリーがそれらを抽出して検証する方法は?
1 に答える
ビューの復元段階で UI コンポーネント ツリーに保存されているものを確認するにはどうすればよいですか?
この質問は最終的に混乱を招きます。復元中に保存されるものはありません。代わりに、状態が復元されています。状態の保存は、レンダリング レスポンス フェーズで行われます。の JSF 実装固有の実装のメソッドで発生することがわかります。モハラの場合は.saveView()
StateManager
StateManagerImpl#saveView()
フォームの値 (フォームの入力フィールドの値など) は、ビューの復元フェーズでどこに保存されますか?
ビューステートにはフォーム値が含まれていません。送信された値は、リクエスト値の適用段階で通常の方法で HTTP リクエスト パラメータとして取得されます。基本的なサーブレットAPI に精通している場合は、そのしくみを確実に理解できます。
そして、モデルオブジェクトに保存する前に、UIコンポーネントツリーがそれらを抽出して検証する方法は?
フォームの値の抽出 (デコード) は、リクエスト値の適用フェーズで大まかに次のように行われます。
String submittedValue = request.getParameter(input.getClientId(facesContext));
このソース コードは、Mojarra で見ることができますHtmlBasicRenderer#decode()
。検証はUIInput#validate()
、次のように大まかに表すことができる検証フェーズ中にメソッドで行われます。
for (Validator validator : input.getValidators())
validator.validate(facesContext, input, submittedAndConvertedValue);
}