2014-10-08 52 views
0

我正在使用最小/最大Bean驗證。這裏有一個例子:Bean驗證最小/最大錯誤消息

@Min(value = 100, message="too low") 
@Max(value = 1000, message="too high") 
private Integer example; 

如果我進入99我得到正確的消息"too low"。如果我輸入1001,我也會收到正確的信息"too high"。如果我輸入一個很高的數字,例如10000000000我收到一條通用消息,我發現這是一個:javax.faces.converter.BigIntegerConverter.BIGINTEGER={2}。所以我懷疑如果用戶輸入的數字大於實際的字段類型,他會得到另一條消息。

這實際上並不是我想要達到的。我總是想顯示用戶"too high"。有沒有辦法做到這一點?

回答

1

確實有兩件事情正在進行,轉換和驗證。在第一步中,JSF需要輸入字符串並將其轉換爲數字。這是你得到錯誤的地方。您的值不能轉換爲整數。如果轉換工作正常,JSF會填充您的模型,這就是驗證啓動的地方。如果驗證失敗,您將獲得定義的Bean Validation消息。那麼,你可以這樣做:

  • 配置爲javax.faces.converter.BigIntegerConverter.BIGINTEGER JSF的消息= {2}更描述
  • 更改的數據類型,例如使用的BigInteger。在這種情況下,從字符串到數字的轉換將起作用
  • 在該bean中使用字符串並驗證該字符串。您可能需要在不同的點轉換爲數字,但這取決於您的使用情況。
1

java中的maximum for Integer是2^31,剛剛超過21億。您使用的輸入爲100億,然後超過整數的最大值,並且會溢出該字段,因此無論您使用何種驗證方式,都不會對字段類型有效。您可以將字段類型切換爲BigInteger,然後override the default validation messages以符合您的需求,但考慮到您的問題的目的,這可能是矯枉過正的。您還可以擁有自定義消息

+0

僅僅爲了得到驗證工作而更改字段的類型並不是正確的方法。定製消息是什麼意思?我已經在註釋中使用了自定義消息。它只是覺得奇怪,因爲100億實際上是高和一個數字。 – kukudas 2014-10-09 06:33:22

+0

您可以使用資源束重寫默認驗證器消息。因此,將BigInteger {2}消息設置爲「太高」 – 2014-10-09 23:39:45

1

爲什麼不只是限制在前端的inputfield字符的數量,例如

<h:inputText maxlength="4"/> 

我猜它可能繞過如果你真的想要的,但我would'nt太擔心很多關於黑客入侵網站的人的可用性:-)

+0

這實際上是一個很好的想法。我會建議這個解決方案謝謝你。 – kukudas 2014-10-09 21:45:06