7

我正在尝试对一个字段进行多次验证

    @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" />

但是当我将该字段留空时,它会显示两个错误消息。

任何想法如何处理这两种情况,独立验证空和最大长度。

4

1 回答 1

5

如果您的 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;
        }
    }

在您的情况下,valueString 参数包含一个空值 ("") 并且 BigDecimal(String) 构造函数引发异常,然后验证器返回false

您有两种可能的解决方案:

于 2011-09-26T14:41:06.753 回答