2011-10-25 11 views
1

私は誕生の年のために、次のバリデータを持っている:グループセパレータ

<f:validateLongRange minimum="1920" maximum="1992" /> 

検証メッセージは、いくつかの種類である:誕生の年は1.920の間でなければなりません

」 1.992 "

ユーザーのなかには、「1と9の間にドットを置く必要がありますか?

答えはもちろん「いいえ」ですが、どういうわけかセパレータが表示されないようにエラーメッセージを変更できますか?

(プレースホルダ{0}と{1}を使用して最小値と最大値を挿入するカスタムメッセージバンドルのデフォルトの検証メッセージを変更しましたが、ここで重要ではないと思いますか?

答えて

1

この数値書式はLongRangeValidatorで設定されており、次にNumberConverterを使用してプレースホルダの最小/最大値を作成します。したがって、MessageFormat APIのサブフォームパラメータ機能を残念ながら使用することはできません。

あなたの最善の策は、

<h:inputText validatorMessage="The year of birth must be between 1920 and 1992"> 

またはLongRangeValidatorを拡張し、違った仕事をメッセージ処理(すなわちStringとして変換された最小/最大値を渡さないんカスタムバリデータを供給する代わりにvalidatorMessage属性を使用することですそれには変換せずに渡すだけです)。次のメッセージ形式を使用することができます。

The {2} must be between {0,number,#} and {1,number,#} 
+0

ありがとうございます。 _java.lang.IllegalArgumentException:指定されたObjectをNumberとしてフォーマットできません。同じ結果を持つMessageFormat APIからいくつかの他のサンプルフォーマットを試しました。 –

+0

しかし、最小値/最大値がel式であっても、 'validatorMessage'属性を使うと問題は解決します。ありがとう! –

+0

ああ!私は 'IllegalArgumentException'が出現するとは思わなかった!検査の後、 'LongRangeValidator'は' MessageFormat'に渡す前に値を文字列に変換しているようです。このように 'number'サブフォーマットは実際には使用できません。申し訳ありませんが、私は答えを修正します。 – BalusC