jsf - बीन प्रमाणीकरण @NotNull, @NotBlank और @NotEmpty जेएसएफ+टोमकैट में काम नहीं करता है




tomcat jsf-2 (2)

मैं अपने जेएसएफ प्रबंधित बीन में हाइबरनेट वैलिडेशन एनोटेशन का उपयोग कर रहा हूं। जब मैं @NotBlank , @NotBlank या @NotEmpty उपयोग करता @NotEmpty वे किसी भी तरह से ट्रिगर नहीं लगते हैं।

@NotBlank(message = "{name.required}")
public String name;

राय:

<h:outputLabel value="Name:" /> 
<h:inputText id="name" value="#{person.name}" size="20" />
<h:message for="name" style="color:red" />

यह कैसे होता है और मैं इसे कैसे हल कर सकता हूं?


परिचय

चूंकि आपने इस सवाल के साथ मेरी टिप्पणी पर कोई प्रतिक्रिया नहीं दी है कि आप किस कंटेनर का उपयोग कर रहे हैं, मैंने आपके प्रश्न इतिहास में चारों ओर देखा है कि आप कौन से कंटेनर का उपयोग कर रहे हैं। अब तक मुझे केवल Tomcat मिला। तो मैं इस जवाब के लिए मान लेगा कि आप वास्तव में टोमकैट का उपयोग कर रहे हैं क्योंकि मैंने टिप्पणी पोस्ट करते समय शुरू में अनुमान लगाया था।

सुनिश्चित करें कि आप सभी जेएआर स्थापित करें

टॉमकैट किसी भी JSR303 बीन सत्यापन API / बॉक्स के बाहर कार्यान्वयन के साथ जहाज नहीं भेजता है। आपको इसे स्वयं डाउनलोड और इंस्टॉल करने की आवश्यकता है। आपको संकलन के लिए उन टिप्पणियों का अर्थ यह है कि आपने अपने hibernate-validator.jar /WEB-INF/lib फ़ोल्डर में hibernate-validator.jar फ़ाइल (नामकरण प्रति संस्करण भिन्न हो सकता है) को सही ढंग से छोड़ दिया है। बदले में ये एनोटेशन किसी भी तरह से काम नहीं कर रहे हैं, इसका मतलब केवल यह हो सकता है कि आपने readme.txt पढ़ा नहीं है और / या Hibernate Validator लाइब्रेरी ज़िप / tgz फ़ाइल के /lib/required फ़ोल्डर से JAR को जोड़ना भूल गया है : slf4j-api.jar और validation-api.jar । वास्तव में काम करने के लिए एनोटेशन प्राप्त करने के लिए आखिरी व्यक्ति अनिवार्य है। तो, टॉमकैट में काम करने के लिए हाइबरनेट वैलिडेटेटर प्राप्त करने के लिए, आपको वेबएप /WEB-INF/lib में निम्नलिखित JAR की आवश्यकता है:

  • validation-api.jar (सारणी एपीआई और एनोटेशन स्कैनर शामिल है)
  • hibernate-validator.jar (ठोस कार्यान्वयन शामिल है)
  • slf4j-api.jar (बस काम करने के लिए इसके लॉगर पाने के लिए)

इस तरह @NotBlank और @NotEmpty को काम करना चाहिए। @NotNull विशेष ध्यान देने योग्य है; खाली इनपुट फ़ील्ड्स HTTP अनुरोध पैरामीटर की प्रकृति के कारण क्लाइंट (वेबब्रोसर) से खाली स्ट्रिंग के रूप में डिफ़ॉल्ट रूप से प्राप्त होते हैं। खाली तार null के समान नहीं हैं, इसलिए @NotNull डिफ़ॉल्ट रूप से कभी भी किक नहीं करेगा। जेएसएफ हालांकि वेब.एक्सएमएल में निम्नलिखित संदर्भ पैरामीटर जोड़कर उन्हें null रूप में समझने के लिए कॉन्फ़िगर करने योग्य है:

<context-param>
    <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>
    <param-value>true</param-value>
</context-param>

इस तरह @NotNull भी काम करना चाहिए।

बीवी काम करता है लेकिन केवल खाली फ़ील्ड नहीं

यदि यह अभी भी काम नहीं करता है (यानी 3 एनोटेशन में से कोई भी काम नहीं करता है, लेकिन कम से कम 5 कामों के लिए @Size(min=5) जैसे अन्य लोग ठीक हैं), तो संभावना है कि आपके पास web.xml में निम्न संदर्भ पैरामीटर है web.xml भी:

<context-param>
    <param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name>
    <param-value>false</param-value>
</context-param>

इसके बाद आपको इसे हटा देना चाहिए (यह auto डिफ़ॉल्ट है, यानी केवल जब JSR303 बीन सत्यापन API रनटाइम क्लासपाथ में पाया जाता है) या इसे true पर सेट करने के लिए।

बी.वी. बिल्कुल काम नहीं करता है

जब वास्तव में बीवी के कुछ भी काम नहीं @Size(min=5) , तो @Pattern @Size(min=5) , @Pattern , आदि भी नहीं, तो आपको सत्यापित करना चाहिए कि क्या आपके पास अपने फॉर्म में निम्न नहीं है:

<f:validateBean disabled="true" />

इसके बाद आपको इसे हटा देना चाहिए (यह केवल डिफ़ॉल्ट किक द्वारा होगा) या disabled="false" सेट करने के disabled="false"

सुनिश्चित करें कि आप हाल ही में मोजाररा का उपयोग करें

जब बीवी अभी भी काम नहीं करता है, तो सत्यापित करें कि क्या आप 2.2.3 और 2.2.6 के बीच पुराने मोजाररा संस्करण का उपयोग नहीं कर रहे हैं। उन संस्करणों में एक क्लासलोडिंग प्रतिनिधि बग था जिसके कारण टॉमकैट और क्लोन पर बीन प्रमाणीकरण पूरी तरह से अदृश्य हो गया था। यह मोजररा मुद्दे 3183 के रूप में रिपोर्ट किया गया है और मोजाररा 2.2.7 में तय किया गया है।


मेरे पास एक समान समस्या थी और मैं web-inf लिब में नीचे दिए गए तीन जारों को शामिल करके समस्या को दूर करने में सक्षम था। बस ज़िप फ़ाइल में प्रदान किए गए हाइबरनेट सत्यापनकर्ता जार और जरूरी जार जोड़ें:

  • hibernate-validator-4.3.0.Final.jar
  • jboss-logging-3.1.0.CR2.jar
  • validation-api-1.0.0.GA.jar