我使用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"
展示。有没有办法实现这个目标?
答案 0 :(得分:1)
java中的maximum for Integer是2 ^ 31,刚刚超过21亿。您使用的输入(100亿)超过了整数的最大值并且会溢出该字段,因此无论您使用何种验证,它都不是有效的字段类型。您可以将字段类型切换为BigInteger,然后override the default validation messages以满足您的需求,但鉴于您的问题的目的,这可能是过度的。您还可以拥有自定义消息
答案 1 :(得分:1)
实际上有两件事情正在进行,转换和验证。在第一步中,JSF需要获取您的字符串输入并将其转换为数字。这是您收到错误的地方。您的值无法转换为整数。如果转换有效,JSF会填充您的模型以及验证所在的位置。如果验证失败,您将获得已定义的Bean验证消息。那么你能做什么:
答案 2 :(得分:1)
为什么不限制前端输入字段中的字符数,例如
<h:inputText maxlength="4"/>
我认为如果你真的想要它可以绕过它,但我不会太担心黑客攻击网站的可用性: - )