2010-12-28 7 views
8

के बीच कनेक्शन क्या है यह प्रश्न another question की समस्या से आता है। उस प्रश्न में, मैं एक परिस्थिति में आया हूं कि hasErrors() फ़ंक्शन गैर-लगातार डोमेन क्लास के लिए काम नहीं करता है, यहां तक ​​कि मैंने the instruction, भाग 7.5 के बाद की सभी चीजों के बाद भी।मान्य() और hasErrors()

विक्टर के रास्ते के बाद, मैंने वैध() को कॉल करके समस्या को ठीक किया, लेकिन मुझे समझ में नहीं आता कि यह क्यों काम करता है। Grails दस्तावेजों के बारे में कुछ भी कहना प्रतीत होता है कि आपके पास एरर() फ़ंक्शन से पहले वैध() को कॉल करना चाहिए। यह कैसे हो सकता है?

उत्तर

9

यह मेरे लिए कोई मतलब नहीं है कि validate एक वस्तु मांगने से पहले कहा जा करने की आवश्यकता होगी कि क्या यह hasErrors (या save उचित डोमेन वस्तुओं, जो कवर के तहत validate कॉल के लिए)। इस संदर्भ में मान्य का अर्थ है "जांचें कि यह ऑब्जेक्ट मान्य है या नहीं, अगर कोई त्रुटि नहीं है"।

वैकल्पिक रूप से GORM कार्यान्वयन को किसी ऑब्जेक्ट में कोई भी बदलाव करने के लिए validate पर कॉल करना होगा, जो मेरे लिए कम वांछनीय व्यवहार होगा, क्योंकि इसमें बहुत से काम अक्सर और अनावश्यक रूप से किए जा सकते हैं (उनमें से कुछ बाधाएं बहुत काम शामिल है)।

धारा 7.2 की शुरुआत स्पष्ट रूप से स्पष्ट करती है "डोमेन क्लास को सत्यापित करने के लिए आप किसी भी उदाहरण पर मान्य विधि को कॉल कर सकते हैं"। यह भी कहता है कि "Grails के भीतर अनिवार्य रूप से सत्यापन के 2 चरण होते हैं, पहला चरण डेटा बाध्यकारी होता है जो तब होता है जब आप अनुरोध पैरामीटर को किसी उदाहरण पर बाध्य करते हैं ... इस बिंदु पर आपको त्रुटियों की संपत्ति में पहले से ही त्रुटियां हो सकती हैं टाइप रूपांतरण (जैसे स्ट्रिंग्स टू डेट्स को कनवर्ट करना)। आप इन्हें जांच सकते हैं और एरर एपीआई का उपयोग करके मूल इनपुट वैल्यू प्राप्त कर सकते हैं ... सत्यापन के दूसरे चरण तब होते हैं जब आप मान्य या सहेजते हैं। यह तब होता है जब Grails बाध्यता को मान्य करेगा मान आपके द्वारा परिभाषित बाधाओं को दोबारा शुरू करते हैं। "

documentation for hasErrors यह भी उल्लेख करता है। जब आप documentation site पर हों, तो आप बाईं ओर नेविगेशन फ्रेम में विधि कॉल ढूंढकर इसका उपयोग कर सकते हैं। मैं हमेशा इन और साथ ही अधिक वर्णनात्मक उपयोगकर्ता मार्गदर्शिका पृष्ठों को देखने की सलाह देता हूं, क्योंकि वे अक्सर थोड़ा और विवरण देते हैं। Here's the page for the validate method भी।

मुझे कभी भी validate पर कॉल करने में कोई समस्या नहीं हुई - यह मेरे लिए बहुत स्पष्ट है और मैं उस बिंदु का चयन कर सकता हूं जहां सभी काम किए जाते हैं और मैं सत्यापन के लिए तैयार हूं। मुझे कहीं भी इस व्यवहार को बदलने का विकल्प नहीं दिख रहा है, लेकिन यदि आप validate को स्वचालित रूप से या कुछ स्थितियों के तहत बुलाए जाने के लिए चाहते हैं, तो शायद आप कक्षा में invokeMethod जोड़कर कुछ ग्रोवी मेटा प्रोग्रामिंग जादू का उपयोग कर सकते हैं और इसे validate पर कॉल करने से पहले कॉल कर सकते हैं कुछ कॉल पर here और here देखें। (यकीन नहीं है कि मैं इसकी सिफारिश करता हूं! और ध्यान रखें कि आपकी कक्षा अब जीओआरएम सत्यापन फ्रेमवर्क के भीतर उपयोग होने पर निर्भर होगी, क्योंकि validate विधि अन्यथा मौजूद नहीं हो सकती है)।

+0

आपके सावधानीपूर्वक उत्तर के लिए बहुत धन्यवाद, मैं इसे अब समझता हूं। –

+2

वैसे ... पीटर लेडब्रुक (एक्शन बुक में उत्कृष्ट Grails के लेखकों में से एक) ने GORM Gotchas पर लेखों की एक बड़ी श्रृंखला लिखी है - यह सब कुछ के बारे में कुछ विवरण के आसपास अपने सिर को पाने के लिए बहुत मूल्यवान है काम करता है: [भाग 1] (http://blog.springsource.com/2010/06/23/gorm-gotchas-part-1/), [भाग 2] (http://blog.springsource.com/2010/ 07/02/gorm-gotchas-part-2 /) और [भाग 3] (http://blog.springsource.com/2010/07/28/gorm-gotchas-part-3/)। –

संबंधित मुद्दे