Bean Validation Min / Max错误消息

时间:2014-10-08 11:55:38

标签: jsf-2 bean-validation

我使用Min / Max Beanvalidation。这是一个例子:

@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"展示。有没有办法实现这个目标?

3 个答案:

答案 0 :(得分:1)

java中的maximum for Integer是2 ^ 31,刚刚超过21亿。您使用的输入(100亿)超过了整数的最大值并且会溢出该字段,因此无论您使用何种验证,它都不是有效的字段类型。您可以将字段类型切换为BigInteger,然后override the default validation messages以满足您的需求,但鉴于您的问题的目的,这可能是过度的。您还可以拥有自定义消息

答案 1 :(得分:1)

实际上有两件事情正在进行,转换和验证。在第一步中,JSF需要获取您的字符串输入并将其转换为数字。这是您收到错误的地方。您的值无法转换为整数。如果转换有效,JSF会填充您的模型以及验证所在的位置。如果验证失败,您将获得已定义的Bean验证消息。那么你能做什么:

  • 为javax.faces.converter.BigIntegerConverter.BIGINTEGER = {2}配置JSF消息以使其更具描述性
  • 更改数据类型,例如使用BigInteger。在这种情况下,从字符串到数字的转换将起作用
  • 在bean中使用string并验证字符串。您可能需要转换为不同点的数字,但这取决于您的用例。

答案 2 :(得分:1)

为什么不限制前端输入字段中的字符数,例如

<h:inputText maxlength="4"/>

我认为如果你真的想要它可以绕过它,但我不会太担心黑客攻击网站的可用性: - )