2011-08-30 11 views
8

मैं विशिष्ट अनुरोध पैरामीटर से जुड़ने के लिए मॉडल/कमांड क्लास को कैसे कॉन्फ़िगर कर सकता हूं?वसंत - मॉडल एट्रिब्यूट और पैरामीटर नाम

उदाहरण के लिए मैं विधि निम्नलिखित है:

@RequestMappint("/success") 
ModelAndView success(@ModelAttribute SomeCommand command) { 
    // process 
} 

और कमांड:

class SomeCommand { 
    String title 
} 

यह /success?title=test की तरह अनुरोध, जब अनुरोध पैरामीटर नाम गुण नाम कमान के बराबर के लिए ठीक काम कर रहा है।

लेकिन अगर मुझे कुछ अलग नाम मैप करने की ज़रूरत है तो क्या होगा? उदाहरण के लिए यदि अनुरोध: /success?sk_title=test

मैं अपने आदेश के अनुरोध पैरामीटर sk_title से title कैसे मैप कर सकता हूं?

यह आदेश पैरामीटर के गुच्छा है, और कुछ अलग अलग तरीकों द्वारा प्रयोग किया जाता है (यह अन्य पुराने सिस्टम के साथ एकीकरण है), इसलिए हर RequestMapped विधि के लिए एक @RequestParam के रूप में इस सभी मापदंडों हो रही बहुत काम है और बहुत अधिक कॉपी/पेस्ट जॉब की आवश्यकता होती है, जो बहुत सारी बग और असमर्थनीय कोड लाती है।

मेरे पास इनपुट पैरामीटर नामों पर पर कोई नियंत्रण नहीं है, इसमें वास्तव में अजीब नाम हैं जैसे 'sk_yt_saf_amount', यही कारण है कि मैं इसे अधिक दोस्ताना संपत्ति नामों से बांधने की कोशिश कर रहा हूं।

पीएस मैं मॉडल और दृश्य दृश्य से मॉडल से अलग करने के लिए, इनपुट डेटा के रूप में, शब्द 'कमांड' का उपयोग कर रहा हूं।

+0

तुम यहाँ @RequestParam ("sk_title") की तरह कुछ का उपयोग करना चाहते नहीं चाहेंगे अपने मामला? – Infinity

+0

मेरे यहां दर्जनों पैरा हैं, इसलिए उनके लिए एक कंटेनर रखना बहुत आसान है। और यह विभिन्न तर्कों के साथ कुछ स्थानों/कुछ यूआरएल में भी प्रयोग किया जाता है, लेकिन समान डेटा संरचना –

+0

यदि ऐसा है, तो अपने पृष्ठ में अनुरोध करें मॉडल.addAttribute ("myuser", new MyUser()) फिर अपने @RequestMapping ("/ सफलता") विधि आप @ModelAttribute ("myuser") जोड़ सकते हैं। अपने जेएसपी फॉर्म में, वसंत रूप सहायक टैग का उपयोग करें, । इससे सभी सबमिट किए गए पैरा को आपके मॉडल में संग्रहीत करने में मदद मिलेगी। – Infinity

उत्तर

0
@RequestMapping("/success") 
    ModelAndView success(@RequestParam("sk_title") String title) { 
     SomeCommand command = new SomeCommand(); 
     command.setTitle(title); 
     model.addAttribute("title", command); 
     //rest of code here 
    } 

class SomeCommand { 
    String title 
    public void setTitle(String title){ 
    this.title = title; 
    } 
} 

यदि आप दृश्य पर नाम विशेषता पर नियंत्रण रखते हैं तो आप इसे और अधिक सरल बना सकते हैं। कुछ कॉमांड ऑब्जेक्ट फ़ील्ड से मेल खाने के लिए बस नाम विशेषताओं को बदलें और वसंत उन्हें ऑटोबैंड करेगा। How to bind request params in spring 3.0? आपको अभी भी मॉडल में कमांड जोड़ने की आवश्यकता होगी और यह जवाब मानता है कि आप स्प्रिंग 3 या अधिक का उपयोग कर रहे हैं। मुझे लगता है कि वसंत को कुछ कॉमांड ऑब्जेक्ट के खेतों पर गेटर्स और सेटर्स की भी आवश्यकता हो सकती है।

@RequestMapping 
public ModelAndView success(SomeCommand someCommand) { 
    model.addAttribute("someCommand", someCommand); 
} 
+1

क्षमा करें, लेकिन मैं कुछ कॉमांड गुणों को भरने के बारे में पूछ रहा हूं –

+0

@splix कोड अब अपडेट किया गया है कि मैं आपके प्रश्न को बेहतर समझता हूं। –

+0

अच्छा विचार है, लेकिन मैन्युअल पैरामीटर मैपिंग के बिना मैं इसे कैसे बना सकता हूं? कुछ और आसान और वसंत-मार्ग। एक एनोटेशन शायद? या डेटा बाइंडर कॉन्फ़िगरेशन? यह कमांड में बहुत सारी संपत्ति है, और यह कुछ कार्यों द्वारा उपयोग की जाती है - यह वहां बहुत प्रतिलिपि/पेस्ट होगी –

0

आप मैप शीर्षक क्षेत्र के लिए अनुरोध पैरामीटर sk_title चाहते हैं, तो नाम sk_title साथ सेटर जोड़ें:

public class SomeCommand { 
    private String title; 

    public String getTitle() { 
     return title; 
    } 

    public void setSk_title(String title) { 
     this.title = title; 
    } 
} 
संबंधित मुद्दे