2

JSF の検証フェーズでは、入力フィールドはどのような順序で検証されますか?

試してみようと思ったのは次のとおりです。変換/検証に合格または失敗する可能性のある入力フィールドのグループがあります。また、他のすべてのフィールドが検証に合格したかどうかに応じて異なる結果を生成するカスタムバリデーターを使用して入力したいと思います。以前のメッセージの FacesContext を確認できますが、他のすべてのフィールドが確認された後にこのカスタム コンバーターが呼び出されることを確認する必要があるため、上記の質問が発生します。それは単に Facelets-Page で定義されている順序ですか? もしそうなら、この注文は保証されますか?

4

1 に答える 1

2

それは単に Facelets-Page で定義されている順序ですか?

基本的に、はい。コンポーネント ツリーは、「通常の方法」で再帰的に処理されます。各コンポーネントについて、最初にコンポーネント自体が処理され、次にその子コンポーネントが順番に処理されます。


もしそうなら、この注文は保証されますか?

はい。これはJSF 2.0 仕様に記載されています。

2.2.3 プロセスの検証

...

リクエスト処理ライフサイクルのプロセス検証フェーズで、JSF 実装はツリーのprocessValidators()メソッドを呼び出す必要があります。メソッドの API リファレンスで説明されているように、UIViewRootこれにより通常processValidators()、ツリー内の各コンポーネントのメソッドが再帰的UIComponent.processValidators()に呼び出されます。

...

したがって、カスタム コンバーターは、すべての必要なコンポーネントの<h:inputHidden>の最後のコンポーネントまたは「スタブ」コンポーネントによって参照される必要があります。目的のコンポーネントは、コンポーネント バインディングによって渡すことができます。この関連する回答も参照してください: JSF はクロスフィールド検証をサポートしていません。回避策はありますか?

まったく別の方法として、全体をコンポジットでラップすることを検討できます。

于 2012-10-17T12:22:20.513 に答える