Bean Validation Min/Max错误消息



我使用的是最小/最大波束验证。这里有一个例子:

@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"。有办法做到这一点吗?

实际上有两件事在进行,转换和验证。在第一步中,JSF需要接受字符串输入并将其转换为数字。这就是出现错误的地方。您的值不能转换为Integer。如果转换有效,JSF会填充你的模型,这就是验证的作用所在。如果验证失败,你会得到定义的Bean验证消息。那么你能做什么:

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

java中Integer的最大值为2^31,略高于21亿。然后,您使用的输入100亿超过了整数的最大值,并且会溢出字段,因此,无论您是否进行了任何验证,给定的字段类型都是无效的。您可以将字段类型切换为BigInteger,然后覆盖默认的验证消息以满足您的需求,但考虑到您的问题的目的,这可能有些过头了。您还可以拥有自定义消息

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

<h:inputText maxlength="4"/>

我想如果你真的想绕过它是可能的,但我不会太担心黑客入侵网站的可用性:-)

相关内容

最新更新