2013-06-05 11 views
42

यह Spring में विशेषज्ञों के लिए गूंगा लग सकता है लेकिन मुझे पूछना है। ModelAndView बनाम Model का उपयोग कब करें, आप कैसे निर्णय लेते हैं?वसंत में ModelAndView बनाम मॉडल का उपयोग कब करें?

आखिरकार मैंने पाया है कि मैंने पाया है कि सबसे अच्छा जवाब this one है। इसने उल्लेख किया है कि ModelAndView एक पुराना तरीका है और ModelString के साथ Spring में एक नया तरीका है।

मेरा प्रश्न है कि हम पुराने ModelAndView को हटा देंगे कि हमारे पास Model है? या क्या ऐसे कोई मामले हैं जिन्हें आपको ModelAndView का उपयोग करने की आवश्यकता है।

इसके अलावा, किसी को भी क्यों View रूप Model को ModelAndView और String मूल्य बदलने के लिए पता है, और क्या लाभ हैं?

उत्तर

39

मैं हमेशा दृष्टिकोण जहां नियंत्रक तरीकों लौट ModelAndView का उपयोग करें। बस क्योंकि यह नियंत्रक विधियों को थोड़ा और अधिक terse बनाने के लिए जाता है। विधि पैरामीटर अब कड़ाई से input पैरामीटर हैं। और सभी output संबंधित डेटा विधि से लौटाई गई वस्तु में निहित है।

ModelAndView शैली उन लोगों के साथ गूंजने लगती है जो किसी विधि को इनपुट पैरामीटर अपडेट करना पसंद नहीं करते हैं। इस विश्वास से चिपके हुए कि यह एक साइड इफेक्ट, एक खतरनाक पैटर्न का गठन करेगा क्योंकि आप विश्वसनीय तरीके से भविष्यवाणी नहीं कर सकते कि विधि क्या करने जा रही है - यह लौटाई गई वस्तु में डेटा वापस कर सकती है, या यह किसी भी इनपुट तर्क में कुछ भी अपडेट कर सकती है।

तो कुछ लोग अभी भी ModelAndView पसंद करना जारी रखेंगे।

विधि पैरामीटर के रूप में Model के साथ नई शैली और दृश्य नाम के रूप में स्ट्रिंग लौटा दी गई। लगता है कि थोड़ा अलग डिजाइन दृष्टिकोण से आया है। यहां मॉडल ऑब्जेक्ट्स को कई हैंडलर को पारित होने वाली घटनाओं या वस्तुओं के प्रकार के रूप में माना जाता है, जहां वे प्रस्तुत किए जाते हैं, वहां वापस लौटने से पहले। यह मुझे याद दिलाता है कि एडब्ल्यूटी/स्विंग दुनिया में घटनाओं को कैसे संभाला जाता है। यह मॉडल उस दृष्टिकोण के साथ अधिक सुसंगत है जहां कई हैंडलर Model ऑब्जेक्ट्स के शीर्ष पर बना सकते हैं, जब तक यह एक दृश्य तक नहीं पहुंच जाता।

तो दिन के अंत में, किसी भी दृष्टिकोण की आलोचना या प्रचार करने का एक निश्चित कारण प्रतीत नहीं होता है। आपको उस शैली का उपयोग करना चाहिए जो आपके समग्र डिजाइन दर्शन के प्रति अधिक सुसंगत महसूस करता है।

उम्मीद है कि इससे मदद मिलती है।

+0

यह धन्यवाद :) यहाँ मेरी कोड है काम "STB1/घर"); \t \t वापसी एमएवी; // // // /src/main/webapp/WEB-INF/jsp/STB1/home.jsp \t} प्रस्तुत करता है ' – Sangimed

14

एक अंतर यह मैं देखा जा सकता है ModelAndView वस्तु के साथ है आप एक दृश्य वस्तु के लिए एक सीधा संदर्भ सेट कर सकते हैं:

ModelAndView mav = ... 
mav.setView(myView); 

जबकि यदि आप मॉडल और स्ट्रिंग का उपयोग करें, आप में दृश्य का नाम हल करने के लिए एक दृश्य समाधानकर्ता की जरूरत एक वास्तविक दृश्य

public String myHandler(...) { 
    return "myviewname"; // has to have a resolver from "myviewname" into an actual view 
} 
+0

हालांकि मैं इसके साथ सहमत हूं, फिर भी मैं दृश्य रिजॉलर्स को प्रदर्शित करने के लिए पेज को हल करना पसंद करता हूं। '@RequestMapping (value =" STB1/घर ", विधि = RequestMethod.GET) \t सार्वजनिक ModelAndView homeAction() { \t \t ModelAndView MAV = नए ModelAndView (: –

0

एसईओ परिप्रेक्ष्य में, हम 301 पुनर्निर्देशन लागू करने के लिए मॉडल एंड व्यू का उपयोग कर सकते हैं यदि हमारे पास इसके लिए कोई आवश्यकता है, तो हम मॉडल का उपयोग करके इसे प्राप्त नहीं कर सकते हैं।

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