मुझे समझ में नहीं आ रहा है कि जेएसआर 303 (बीन सत्यापन) गेटटर विधियों के लिए क्यों नहीं है और सेटटर नहीं है? क्या इसे सेटटर विधि के तहत रखना अधिक तर्कसंगत नहीं है क्योंकि यह एक क्षेत्र में प्रवेश बिंदु है और इससे पहले सत्यापन की जांच की जानी चाहिए?जेएसएफ: जेएसआर 303 बीन प्रमाणीकरण - गेटटर पर क्यों नहीं और सेटटर नहीं?
उत्तर
यह एक बहुत अच्छा सवाल और कुछ है जिस पर मैंने कभी ध्यान नहीं दिया है। लेकिन मुझे लगता है कि मुझे जवाब पता है (और मुझे यह सवाल क्यों नहीं मिला)।
यदि आप इसे देख रहे हैं, तो यह देखते हुए कि एनोटेशन परिभाषित करता है कि सत्यापन कहां होगा, फिर इसे गेटर पर डालने से कोई अर्थ नहीं होता है। (मान को संग्रहीत करते समय मान्य क्यों नहीं है ..)। लेकिन ऐसा नहीं है कि यह कैसे काम करता है ...
प्रोग्रामर को सत्यापन ढांचे को बताने की आवश्यकता है, जिन्हें गुणों को सत्यापित करने की आवश्यकता है। तो आप एनोटेशन को सीधे विशेषता (जिसे मैं पसंद करता हूं) पर डाल सकता हूं या आप इसे गेटर पर डाल सकते हैं। उनमें से दोनों पढ़ने के ऑपरेशन को इंगित करते हैं। फ्रेमवर्क को आपकी कक्षा के सभी विशेषताओं को पढ़ने की आवश्यकता है, जिन्हें सत्यापित किया जाना होगा। तो इस मामले में, सेटटर डालने पर कोई मतलब नहीं है .. समझने की कुंजी परिप्रेक्ष्य है ...
मुझे उम्मीद है कि यह समझ में आता है।
हां, अगर आप इसे इस तरह देखते हैं तो यह समझ में नहीं आता है।मुझे लगता है कि गेटटर पर आपकी एनोटेशन की स्थिति नहीं है, गेटर पर सत्यापन करता है। हम उस विशेषता को चिह्नित कर रहे हैं जैसे फ्रेमवर्क को सत्यापित करने की आवश्यकता है। –
मैं समझता हूं कि आप क्या कहने की कोशिश कर रहे हैं। जहां तक मैं जेएसएफ जीवन चक्र के बारे में समझता हूं, यदि प्रक्रिया सत्यापन चरण के दौरान सत्यापन त्रुटि है, तो वही पृष्ठ फिर से चलाया जाता है। सत्यापन करने के लिए एक सेटर विधि लागू नहीं की जानी चाहिए? एक गेटटर विधि केवल पृष्ठ प्रतिपादन चरण पर ही लागू होती है। पृष्ठ प्रतिपादन चरण पर सत्यापन क्यों करें? जिस तरह से मैं इसे देखता हूं, इस चरण में सत्यापन करने के लिए व्यर्थ है .. ठीक है अब सब अच्छा है और इसलिए कहा गया पृष्ठ प्रदर्शित करने के लिए प्रस्तुत किया गया है। – yapkm01
ऐसा इसलिए है क्योंकि ऐसे मामले हैं जहां कोई सेटटर विधि नहीं है। सेटर को केवल पढ़ने वाली संपत्ति पर शामिल नहीं किया जाएगा। – ialexander
गेटर्स को एनोटेट करने का मतलब यह नहीं है कि गेटटर लागू होने पर सत्यापन किया जाता है। इसका उपयोग उस संपत्ति की पहचान करने के लिए किया जाता है जिस पर एक बाधा लागू होगी।
इसके बजाए (आमतौर पर निजी) फ़ील्ड (आमतौर पर निजी) फ़ील्ड पर बाधा डालने का बड़ा लाभ यह है कि बाधाएं इस तरह के सार्वजनिक एपीआई का हिस्सा हैं। वे जेनरेट किए गए जावाडोक में भी जोड़े जाएंगे। एक प्रकार का उपयोगकर्ता जानता है कि जिस तरह से बाधाएं इसके आंतरिक कार्यान्वयन को देखे बिना लागू होती हैं।
एनोटेटिंग गेटर्स का एक अन्य लाभ यह है कि बाधाओं को बेस क्लास या इंटरफेस पर विधियों पर रखा जा सकता है और किसी भी उप-प्रकार/कार्यान्वयन के लिए भी आवेदन किया जा सकता है। बस क्षेत्र को देख private String name;
से अधिक एनोटेशन आसानी से क्षेत्र की पहचान करता है
public class BeanValidation {
private int nameSetCount = 0;
private int nameGetCount = 0;
private String name;
public String getName() {
this.nameGetCount++;
return name;
}
public void setName(String name) {
this.nameSetCount++;
this.name = name;
}
}
रखें एनोटेशन:
यदि ऐसा है, तो सार्वजनिक सेटर विधि पर बाधाओं को डालने पर मुझे कोई समस्या नहीं दिखाई दे रही है। आपके उत्तर – yapkm01
के समान परिणाम मुझे लगता है कि सेटर विधियों के बजाय गेटर का उपयोग करने का एक फायदा यह है कि इससे अपरिवर्तनीय गुण होने की अनुमति मिलती है जिसके लिए उपरोक्त उल्लिखित संपत्ति स्तर (क्षेत्र स्तर के लिए अपवाद) बाधाओं के लाभ प्राप्त करते समय कोई सेटटर मौजूद नहीं है। – Gunnar
@ yapkm01 कृपया मेरे उत्तर पर एक नज़र डालें। सेटर विधि के साथ एक समस्या है। आप सार्वजनिक सेटटर विधि का उपयोग करके हमेशा सही क्षेत्र की भविष्यवाणी नहीं कर सकते हैं। –
इस कोड पर विचार करें।
रखें एनोटेशन public String getName()
से अधिक एनोटेशन आसानी से क्षेत्र की पहचान करता है बस देख पर क्षेत्र लौट आए।
रखें एनोटेशन public void setName(String name)
से अधिक
एनोटेशन क्षेत्र पहचान नहीं कर सकते, क्योंकि वहाँ एक से अधिक हो सकता है संशोधित क्षेत्र को देखकर।
प्रतिबिंब विधि कार्यान्वयन को नहीं देखता है, यह गेटटर/सेटर का नाम देखता है और एक फ़ील्ड तक मेल खाता है –
- 1. जेएसआर में जेएसआर 303
- 2. जेएसआर -303
- 3. स्प्रिंग एमवीसी और जेएसआर 303
- 4. जीडब्ल्यूटी जेएसआर 303 ग्राहक सत्यापन
- 5. जेएसआर 303 - javax.validation - दिनांक
- 6. जेएसएफ: प्रमाणीकरण और प्रमाणीकरण,
- 7. प्रोग्रामेटिक बीन मान्यता (JSR 303) एनोटेशन बिना
- 8. जेएसएफ 2 में बीन प्रमाणीकरण की संसाधनबंडल पैरामीटरकरण संभावना?
- 9. जेएसएफ: बैकिंग बीन
- 10. बीन प्रमाणीकरण
- 11. बीन सत्यापन वीएस जेएसएफ सत्यापन
- 12. जेएसएफ 2.0 किसी अन्य बीन
- 13. प्रमाणीकरण के बाद प्राइमफ़ेस जेएसएफ अपडेट विफल नहीं हुआ
- 14. जेएसएफ प्रबंधित बीन ऑटो-निर्माण?
- 15. जेएसएफ ने बीन विधि का समर्थन करने और ENTER कुंजी
- 16. एक जेएसएफ पेज और एक प्रबंधित बीन के बीच, गेटर विधि को दो बार
- 17. ConstraintValidator में इंजेक्ट सेवा [बीन सत्यापनकर्ता - JSR 303] स्प्रिंग
- 18. जेएसएफ 2 एप्लीकेशनस्कोप बीन तत्काल समय?
- 19. फ़ॉर्म इनपुट मान कैसे भेजें और जेएसएफ बीन
- 20. जेएसएफ बैकिंग बीन में गतिशील रूप से निर्मित URL पर बैकिंग बीन से रीडायरेक्ट कैसे करें?
- 21. जेएसएफ 2 i18n बीन सत्यापन संदेश
- 22. जेएसएफ कस्टम घटक नहीं मिला
- 23. यह अभिव्यक्ति क्यों काम नहीं करती है? जेएसएफ
- 24. जेएसएफ 2 - @ManagedBean नहीं मिला
- 25. क्या कोई संपत्ति नहीं है जिसके पास कोई गेटटर नहीं है?
- 26. बीन
- 27. जेएसएफ टॉमकैट पर - यह क्यों संभव है?
- 28. स्प्रिंग 3 में अक्षम जेएसआर -303 समर्थन को कैसे बल दें?
- 29. JSR-303 निर्भरता इंजेक्शन और हाइबरनेट
- 30. @ स्कोप ("प्रोटोटाइप") बीन स्कोप नया बीन नहीं बना रहा
मुझे समझ में नहीं आता कि आप मैदान के बजाय गेटटर पर बाधा डाल रहे हैं। क्या यह क्षेत्र में खुद को रखने के लिए और अधिक तार्किक नहीं है, ठीक है, एकमात्र क्षेत्र ही है? – BalusC
@ बाल्लूसी याप! मैं आपसे सहमत हुँ। तो सवाल यह है कि अगर मैं उस क्षेत्र पर सत्यापन करता हूं, तो क्या मुझे उस क्षेत्र गेटटर विधि पर एनोटेशन लगाने की भी आवश्यकता है? यदि नहीं, तो गेटटर विधि के लिए बिल्कुल एनोटेशन क्यों है? – yapkm01