0

rich:tabpanel といくつかのタブがあります。タブパネルのタイプは「クライアント」に設定されています。各タブには、いくつかの h:inputText があります。

私がしたいのは、「タブ:タブ1 [、タブ2 [、タブ3 ...]]にエラーがあります。保存する前にエラーを修正してください」のようなエラーを表示することです。すべてのタブにエラーがある場合。これを AjaxListener(Seam) または PhaseListener で実装しようとしました (どちらもやりたいことを達成できます)。

問題は、immediate="true" でマークされた入力がある場合、これらの入力が最初に、immediate="false" でマークされた入力とは別に検証されることです。これらの「即時」入力にエラーが含まれていない限り、「非即時」入力は検証されません。

jsfバリデーターにコマンドボタンのすべての入力を強制的に検証させる方法はありますか? またはjsfのデフォルトのバリデータをオーバーライドする方法はありますか?

4

1 に答える 1

0

JSF には「デフォルトのバリデーター」はありません。各コンポーネントは、必要に応じて独自の変換と検証を処理します。コンポーネントには、 JSF ライフサイクルの各フェーズで呼び出されるコールバックがあり、これらのコールバックは、コンポーネント ツリー内の各コンポーネントの検証および変換ロジックを呼び出します (したがって、集中型のコンバーターまたはバリデーターはありません)。

プロセス検証フェーズ (ライフサイクルの 3 番目) でimmediate=false検証と変換を実行する入力コンポーネントと、要求値の適用フェーズ (ライフサイクルの 2 番目) で実行する入力コンポーネント。immediate=true

JSF ライフサイクルの「問題」(実際には設計上の制約) は、いずれかのフェーズでエラーが検出されると、フレームワークが残りのフェーズを実行せずに応答のレンダリングimmediate=trueフェーズに直接ジャンプすることです。 (第 2 フェーズ) 第 3 フェーズは呼び出されません。

これに対する回避策はありません。すべての入力を行うimmediate=falseimmediate=true、すべての検証が同じフェーズで行われるようにする必要があります。immediate=falseよほどの理由がない限りそのままにしておくことをお勧めします。たとえば、入力の検証ステータスに関係なくアクションを実行する必要がある場合は、 commandButton を作成しますimmediate=true

于 2012-07-17T10:32:41.510 に答える