我正在尝试使多个验证一一字段
@NotBlank(message = "{name.required}")
@Max(value = 25, message = "{long.value}")
public String name;
JSF:
<h:inputText id="name" value="#{person.name}" size="20">
</h:inputText>
<h:message for="name" style="color:red" />
但是当我将该字段留空时,它会显示两个错误消息。
任何想法如何处理这两种情况,独立验证空和最大长度。
最佳答案
如果您的 JSF 2 配置将空提交的值解释为 ""
而不是 null
然后 :@NotBlank
验证器返回 false
因为你的注释
字符串为空。@Max
验证器返回 false
因为根据休眠实现(我猜你正在使用基于你以前的帖子的休眠实现)。
public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
//null values are valid
if ( value == null ) {
return true;
}
try {
return new BigDecimal( value ).compareTo( BigDecimal.valueOf( maxValue ) ) != 1;
}
catch ( NumberFormatException nfe ) {
return false;
}
}
在你的情况下
value
字符串参数包含一个空值 ("") 并且 BigDecimal(String) 构造函数抛出异常,然后验证器返回 false
.您有两种可能的解决方案:
interpret empty submitted values as null
(或) name
输入数字而不是字符串。 关于jsf - 使用 JSF bean 验证在一个字段上使用多个验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7553796/