ठीक है, वसंत स्रोत कोड में कुछ ट्रेसिंग के बाद, मुझे लगता है कि मेरे पास कुछ निश्चित उत्तर हैं।
1) एक यूआरएल में मैन्युअल रूप से क्वेरी पैरामीटर जोड़ना जो आप "रीडायरेक्ट: ..." स्ट्रिंग में वापस भेजते हैं, एक बहुत खराब आईडीई है। वसंत उन यूआरएल के विचारों को कैश करता है, इसलिए यदि आप कई अलग-अलग पैरामीटर निर्दिष्ट करते हैं, तो आप कैश को बहुत सारे मूल्यों को पकड़कर स्मृति को प्रभावी ढंग से रिसाव करते हैं, जिसकी आवश्यकता नहीं होती है।
ध्यान दें कि वसंत वितरण में PetClinic उदाहरण कोड वास्तव में यह करता है, और जाहिरा तौर पर वहाँ इसे सही करने के :-)
2) मॉडल वस्तु अभी भी वसंत द्वारा आयोजित किया जाता है जब नियंत्रक उठाया एक Jira मुद्दा रहा है रिटर्न, और स्प्रिंग स्वचालित रूप से आपके द्वारा निर्दिष्ट यूआरएल (क्वेरी पैरामीटर के रूप में) पर कोई भी मूल्य जोड़ देगा - प्रदान किया गया है कि मॉडल मान सादा स्ट्रिंग या आदिम ऑब्जेक्ट्स हैं। अब, चूंकि फॉर्म बैकिंग ऑब्जेक्ट एक ऑब्जेक्ट के रूप में संग्रहीत ऑब्जेक्ट है, इसलिए वसंत इसके साथ कुछ भी नहीं करता है।
तो - एक एनोटेटेड कंट्रोलर से, सबसे अच्छा तरीका हैंडलर विधि में मॉडलमैप पैरामीटर जोड़ना प्रतीत होता है। ? जब आप वापस जाने के लिए तैयार हैं, कुछ इस तरह करते हैं: करने के लिए/मेरी/यूआरएल
Assuming the form backing object "formObject" has been passed as a parameter to the controller handler method (via the ModelAttribute annotation) and has properties "param1" and "param2" that are Strings -
modelMap.clear();
modelMap.addAttribute("param1", formObject.getParam1());
modelMap.addAttribute("param2", formObject.getParam2());
return "redirect:/my/url";
और वसंत में एक रीडायरेक्ट जारी करेगा param1 = मूल्य; param2 = मूल्य
वहाँ होने के लिए प्रकट नहीं होता है नक्शा में जोड़ने के लिए कुंजी/मूल्य जोड़े की सूची में एक बीन को चालू करने के लिए एक अंतर्निर्मित तंत्र (वसंत में), लेकिन यदि आपको वास्तव में इसकी आवश्यकता है, तो अपाचे बीनयूट्स लाइब्रेरी अच्छी तरह से करेगी। बेशक, आप बड़ी वस्तुओं के लिए ऐसा नहीं करना चाहते हैं अन्यथा आप एक यूआरएल की स्वीकार्य लंबाई से अधिक हो सकते हैं।
सब पता लगाना बहुत कठिन लग रहा था की तुलना में यह :-)
काम करने के लिए प्रतीत नहीं होता है होने की जरूरत ...मैं एनोटेटेड कंट्रोलर का उपयोग कर रहा हूं, इसलिए मेरा नियंत्रक सिर्फ एक सादा जावा वर्ग है, जो किसी स्प्रिंग क्लास से विरासत में नहीं है। यदि मैं एक नया रीडायरेक्ट व्यू ऑब्जेक्ट बनाता हूं और उसे नियंत्रक से वापस भेजता हूं ... यह यूआरएल में कुछ भी शामिल नहीं करता है। मैं नहीं देख सकता कि RedirectView ऑब्जेक्ट को फ़ॉर्म ऑब्जेक्ट का संदर्भ कैसे मिलेगा - मेरे फॉर्म में पास करने के लिए कोई सेटटर या कन्स्ट्रक्टर विकल्प नहीं है! – David
जब RedirectView संसाधित किया जाता है renderMergedOutputModel कहा जाता है। यह विधि आपके मॉडल को प्राप्त करती है और सही यूआरएल प्रस्तुत करती है। – uthark
यदि मैं एक नया रीडायरेक्ट व्यू बनाता हूं तो इसका किसी भी मॉडल ऑब्जेक्ट का कोई संदर्भ नहीं होगा। और इसे मॉडल ऑब्जेक्ट देने के लिए कोई सेटटर नहीं है। अगर मैं RedirectView पर "रेंडर()" विधि को कॉल करता हूं, तो मेरे मॉडल ऑब्जेक्ट वाले मानचित्र को पास करता है, तो यह रनटाइम पर एक IllegalStateException फेंकता है। ऐसा लगता है कि फ्रेमवर्क एनोटेशन का उपयोग करते समय ऐसा करने के लिए समर्थन शामिल करना भूल गया ... – David