2011-10-25 75 views
1

我爲出生年份以下驗證:集團分離器在JSF驗證消息

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

驗證消息是某種:

「出生年份必須是1.920之間和1.992「

現在一些用戶抱怨:」我必須在1和9之間加點嗎?「

答案當然是「不」,但我可以以某種方式更改錯誤消息,使其不顯示分隔符?

(我已經使用佔位符{0}和{1}來更改自定義消息包中的默認驗證消息以插入最小值和最大值,但我認爲這並不重要)。

回答

1

此數字格式由LongRangeValidator設置,該數字格式依次使用NumberConverter準備佔位符的最小/最大值。因此,您可能不會使用MessageFormat API的SubformatPattern功能。

最好的辦法是使用validatorMessage屬性,而不是

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

或提供延伸LongRangeValidator並執行不同的消息處理作業的自定義驗證(即不經過轉換後的最小/最大值爲String到它,但只是通過它未轉換)。您應該可以使用以下消息格式:

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

感謝BalusC。如果我按照你的建議更改了消息格式,我得到一個異常:_java.lang.IllegalArgumentException:無法將給定的對象格式化爲Number_我也嘗試了其他來自MessageFormat API的其他示例格式,結果相同。 –

+0

但使用'validatorMessage'屬性可以解決問題,即使最小/最大值是el表達式。謝謝! –

+0

哦!我沒想到會出現'IllegalArgumentException'!在檢查之後,似乎'LongRangeValidator'在傳遞給'MessageFormat'之前將它自己的值轉換爲字符串。這樣你可以不使用'數字'子格式。對不起,我會解決答案。 – BalusC