我正在尝试对一个字段进行多次验证
@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" />
但是当我将该字段留空时,它会显示两条错误消息。
任何想法如何处理这两种情况,独立验证空和最大长度。
答案 0 :(得分:5)
如果您的JSF 2配置将空提交的值解释为""
而不是null
,那么:
@NotBlank
验证程序返回false
,因为您已注释
字符串是空的。
@Max
验证器返回false
,因为根据hibernate实现(我猜你在以前的帖子中使用了hibernate实现)。
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
String参数包含空值(“”),BigDecimal(String)构造函数抛出异常,然后验证器返回false
。
您有两种可能的解决方案:
interpret empty submitted values as null
(或)name
类型更改为数字而不是字符串。