1

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 を顔メッセージにバインドする理由と場所を誰か説明できますか? アドバイスしてください、ダクシャタ・グルコバレ

4

1 に答える 1

0

label対象の入力コンポーネントに属性を設定することで、ラベルをオーバーライドできます。

<h:inputText ... label="Your label" />

このようにして、検証メッセージは次のようにフォーマットされます。

あなたのラベル: 検証エラー: 指定された属性は、1 から 999,999 の期待値の間にありません

それ以外の場合は、コンポーネントのクライアント ID がデフォルトになります。

すでに使用し<h:outputLabel>ていて、その値をそのまま使用したいがlabel、すべての入力コンポーネントの属性に複製したくない場合は、OmniFaces <o:outputLabel>が役立つことがあります。

于 2012-06-13T15:16:03.727 に答える