7

複数の検証を1つのフィールドにしようとしています

    @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

考えられる解決策は 2 つあります。

于 2011-09-26T14:41:06.753 に答える