JSF 1.1 から JSF 2.0 にアップグレードしました。以前は f:validateLongRange または f:validateDoubleRange を使用していましたが、検証は正常に機能しました。ただし、JSF 2.0 に移行したため、検証メッセージの前に次のようなクライアント ID が表示されます。
premiumCategory:j_idt368:0:tlNewLOS: Validation Error: Specified attribute
is not between the expected values of 1 and 999,999.
ClientID のプレフィックスについて話しているJiraがありますが、私には何の役にも立たないと思います。Communication in JSF 2.0 のブログで、これらのタグ ハンドラが JSF 2.0 では正しく機能しないことを知りました。そのため、f:validator を使用してカスタム バリデータを作成する必要があります。
ここからBalusCの答えに従いました; 唯一の違いは、Bean から最大値と最小値を取得しなかったことです。xhtml で指定しましたが、上記のように検証メッセージが出力されました。
デバッグ中に、クライアント ID が FormID:ClientID:0:ComponentID として生成され、MessageFactory.getMessage メソッドに渡される UIComponent インスタンスに格納されていることに気付きました。前に言及した同じブログには、「フォーム外のコンテンツの Ajax レンダリング」というトピックがあり、これで問題が解決すると思いましたが、やはりうまくいきませんでした。
これで、DoubleRangeValidator に拡張され、validate メソッドをオーバーライドする独自のカスタム バリデータ クラスができました。希望のメッセージが届きます。ただし、 f:validatorXXXX コンポーネントごとにカスタムバリデータを作成することが解決策であるとは確信していません。
私はまだ学習曲線の途中ですが、MessageFactory.getMessage がこれらの ID を顔メッセージにバインドする理由と場所を誰か説明できますか? アドバイスしてください、ダクシャタ・グルコバレ