2010-01-01 8 views
5

मैंने एक नियंत्रक बनाया है जो कुछ व्यवसाय तर्क करता है और एक मॉडल बनाता है। यदि मैं मॉडल और दृश्य को वापस देखने और मॉडल के साथ इस मॉडल को सीधे देखने के लिए पास करता हूं - सबकुछ बढ़िया काम करता है। लेकिन अब मैं दूसरे पेज पर परिणाम प्रदर्शित करना चाहता हूं। तो मैं किसी अन्य नियंत्रक पर रीडायरेक्ट करने के लिए "रीडायरेक्ट:" उपसर्ग का उपयोग करता हूं, लेकिन मॉडल खो गया है।स्प्रिंग एमवीसी - नियंत्रकों के बीच पास मॉडल

मुझे क्या याद आ रही है?

सादर, ऑलेक्ज़ेंडर

उत्तर

0

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

+1

हां, मैं अपने व्यापार तर्क को किसी अन्य वर्ग में अलग कर सकता हूं। लेकिन यह तर्क करने के लिए, मुझे इनपुट पैरामीटर की आवश्यकता है। मैं उन्हें अपने पहले नियंत्रक में उपयोगकर्ता से प्राप्त कर रहा हूं, और मुझे उन्हें दूसरे (परिणाम) नियंत्रक को पास करने का एक तरीका चाहिए, जो बाद में व्यवसाय तर्क वर्ग को कॉल करेगा। आप देखते हैं, मेरी कठिनाई नियंत्रकों (इनपुट डेटा नियंत्रक और परिणाम नियंत्रक) के बीच कुछ डेटा (इस मामले इनपुट पैरामीटर) को पारित करना है। – Oleksandr

4

विकल्प 1: आप मॉडल को सत्र में डाल सकते हैं और इसे नियंत्रक में वापस ले सकते हैं और सत्र में इसे रद्द कर सकते हैं।

विकल्प 2: तुमने कहा था, आप दो नियंत्रकों कर रहे हैं, पहले एक उपयोगकर्ता इनपुट को पुनः प्राप्त करने के लिए और कुछ व्यापार तर्क करते हैं और अन्य एक पर रीडायरेक्ट करेगा। मेरा सुझाव व्यापार तर्क को स्थानांतरित करना है जो दोनों नियंत्रकों में कक्षा में रखा गया है और केवल एक नियंत्रक है जो मॉडल को वापस करेगा और उपयोगकर्ता को देखेंगे।

+1

लेकिन मैं एनोटेशन के साथ स्प्रिंग-एमवीसी का उपयोग करके सत्र में मॉडल कैसे सहेज सकता हूं। क्या आप मुझे एक उदाहरण दे सकते हैं? – Oleksandr

+4

मॉडल और दृश्य एमवी = नया मॉडल और दृश्य(); mv.addObject ("key1", "value1"); mv.addObject ("key2", "value2"); mv.addObject ("key3", "value3"); request.getSession()। SetAttribute ("मॉडल", mv.getModelMap()); – novice

+0

उत्तर के लिए बहुत बहुत धन्यवाद! हम लगभग वहीँ हैं। एकमात्र चीज जिसे मैं अभी तक समझ नहीं पा रहा हूं, एनोटेशन के साथ एचटीपीएसशन में पैरामीटर्स को स्टोर करना है। उदाहरण के लिए @ सत्र एट्रिब्यूट नियंत्रक के अंदर अनुरोधों के बीच डेटा स्टोर करता है।क्या कोई एनोटेशन है जो डेटा स्टोर करता है सत्र स्थायी रूप से होता है। या हम @RequestParam के साथ HttpSession तक कैसे पहुंच सकते हैं? अयस्क कुछ और तरीका है? – Oleksandr

0

मैं @ सत्र एट्रिब्यूट्स का उपयोग नहीं करता क्योंकि यह वसंत की भविष्य की रिलीज में बदल सकता है। मैं पुराने जमाने तरह से है कि ऑलेक्ज़ेंडर एक पुराने पोस्ट के ऊपर

किसी भी तरह आप से पता चला है लेकिन शायद किसी और यह

11

आप आगे उपयोग कर सकते हैं उपयोगी मिलेगा साथ रहना होगा: उपसर्ग जो अंततः एक RequestDispatcher.forward करता है() रीडायरेक्ट का इंस्टॉलेशन: उपसर्ग।

+0

यह समाधान मेरे लिए काम किया। धन्यवाद @ निराज – will824

2

पुनर्निर्देशन के दौरान: अनुरोध यूआरएल में संलग्न पैरामीटर के साथ जीईटी विधि का उपयोग करके भेजा जाता है। आप @RequestParameter एनोटेशन के साथ अनुरोध पैरामीटर प्राप्त करने के लिए नियंत्रक में एक नई विधि सही कर सकते हैं। पुनः निर्देशित जबकि अनुरोध सरल

e.g ModelAndView mv = new ModelAndView(); 
mv.setViewName(redirect:/your/url); 
mv.addObject("param1", string_param); 
. 
. 
. 

इस तरह स्ट्रिंग के रूप में सभी मापदंडों को जोड़ने आप सफलतापूर्वक अनुप्रेषित कर सकते हैं।