1

ビューの復元段階で UI コンポーネント ツリーに保存されているものを確認するにはどうすればよいですか? フォームの値 (フォームの入力フィールドの値など) は、ビューの復元フェーズでどこに保存されますか? そして、モデルオブジェクトに保存する前に、UIコンポーネントツリーがそれらを抽出して検証する方法は?

4

1 に答える 1

5

ビューの復元段階で UI コンポーネント ツリーに保存されているものを確認するにはどうすればよいですか?

この質問は最終的に混乱を招きます。復元中に保存されるものはありません。代わりに、状態が復元されています。状態の保存は、レンダリング レスポンス フェーズで行われます。の JSF 実装固有の実装のメソッドで発生することがわかります。モハラの場合は.saveView()StateManagerStateManagerImpl#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);
}

以下も参照してください。

于 2013-09-11T12:28:17.673 に答える