JSF बीन सत्यापन के साथ एक फ़ील्ड पर एकाधिक मान्यकर्ता



jsf-2 bean-validation (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" />

लेकिन जब मैं फ़ील्ड खाली छोड़ देता हूं, यह दोनों त्रुटि संदेश दिखाती है

किसी भी विचार कैसे दोनों मामलों को संभालना है, खाली मान्य करें, और अधिकतम लंबाई स्वतंत्र रूप से


यदि आपकी JSF 2 कॉन्फ़िगरेशन खाली सबमिट किए गए मानों को "" रूप में परिभाषित करती है और null न तो:

@NotBlank validator false देता false क्योंकि आपकी एनोटेटेड स्ट्रिंग रिक्त है

@Max सत्यापनकर्ता @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 स्ट्रिंग पैरामीटर में एक खाली मान ("") और बिगडीस्कील (स्ट्रिंग) कन्स्ट्रक्टर अपवाद फेंकता है और फिर वैधीकरण false देता false

आपके पास दो संभावित समाधान हैं:





hibernate-validator