3

Primefaces3.0を使用しています。私は3つのテキストフィールドを持っていますが、そのうちのいずれかが必須です。これをprimefacesで検証するにはどうすればよいですか。助けてください..ありがとう

4

1 に答える 1

6

通常f:validator、コンポーネントでカスタムタグを使用すると、サーバー側で値が適用される前に、ライフサイクルイベントフェーズ中にこのバリデーターが呼び出されます。保留中の値が検証に合格すると、コンポーネントの値として適用されます。検証に失敗した場合、値は破棄され、通常は検証メッセージが追加されます。

特定の入力フィールドの値が有効かどうかの判断は、他の入力フィールドの保留中の値に依存するため、このプロセスはこの状況では機能しません。また、コンポーネントが検証される順序は保証されません。 。

私は通常、ページでPreRenderイベントのライフサイクルイベントを宣言することでこの問題を解決します。

<f:event listener="#{manageBean.preRenderValidation}" type="preRenderView" />

これで、マネージドBeanで、通常の検証とリクエスト値の適用フェーズおよびイベントフェーズが完了した後に、このような検証を手動で実行できます。

public void preRenderValidation() {
    // validation logic
    if (failed) {
      FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "You have a validation error", null);
      getCurrentFacesContextInstance().addMessage(null, msg);
    }
    // If action redirects to another page or state needs reverted back then this must be done
    // manually
}

preRenderで検証エラーが発生すると、特定のコンポーネントイベントがすでに特定の状態を変更したか、ナビゲーションアクションを返した可能性があるため、検証に失敗した場合は手動で元に戻す必要があります。もちろん、これを行うもう1つの方法は、すべてのメソッドの開始時に手動で検証することです。

于 2012-05-14T12:19:24.040 に答える