2011-04-08 16 views
13

में जेएसपी से कंट्रोलर तक पैरामीटर पास करना मैं स्प्रिंग एमवीसी एनोटेटेड कंट्रोलर का उपयोग कर नमूना प्रोजेक्ट का प्रयास कर रहा हूं। मैंने जिन उदाहरणों को ऑनलाइन पाया है, वे अभी तक जेएसपी को किसी विशेष मॉडल से बांधते हैं और नियंत्रक हैंडलर विधि में मॉडल ऑब्जेक्ट को पुनः प्राप्त करने के लिए @ModelAttribute का उपयोग करता है।स्प्रिंग एमवीसी

जेएसपी से कंट्रोलर तक अन्य पैरामीटर (मॉडल ऑब्जेक्ट में मौजूद नहीं) को पार करने के बारे में मैं कैसे जा सकता हूं? क्या मैं ऐसा करने के लिए जावास्क्रिप्ट का उपयोग करता हूं? कोई भी स्पष्टीकरण दे सकता है कि HttpServletRequest ऑब्जेक्ट का उपयोग किस प्रकार किया जाना चाहिए।

धन्यवाद।

उत्तर

30

बस जेएसपी इनपुट टैग से "पथ" को हटाएं और शेष डेटा पुनर्प्राप्त करने के लिए HttpServletRequest का उपयोग करें।

उदाहरण के लिए मैं jsp में मैं अतिरिक्त डेटा फ़ील्ड होगा की तरह

public class SomeData { 
    private String name; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

} 

फिर एक सेम सामान्य HTML टैग

<form:form method="post" action="somepage" commandName="somedata"> 
    <table> 
    <tr> 
     <td>name</td> 
     <td><form:input path="name" /></td> 
    </tr> 
    <tr> 
     <td>age</td> 
     <!--Notice, this is normal html tag, will not be bound to an object --> 
     <td><input name="age" type="text"/></td> 
    </tr> 
    <tr> 
     <td colspan="2"> 
      <input type="submit" value="send"/> 
     </td> 
    </tr> 
</table> 
</form:form> 

सूचना में भेज किया जाना है, somedata सेम है नाम फ़ील्ड उम्र नहीं है। तो उम्र क्षेत्र को "पथ" के बिना जोड़ा जाता है। पथ विशेषता के बिना वस्तु संपत्ति इस क्षेत्र से बंधी नहीं होगी।

नियंत्रक पर

मैं का उपयोग करना होगा HttpServletRequest की तरह,

@RequestMapping("/somepage") 
public String someAction(@ModelAttribute("somedata") SomeData data, Map<String, Object> map, 
           HttpServletRequest request) { 

     System.out.println("Name=" + data.getName() + " age=" + request.getParameter("age")); 

     /* do some process and send back the data */ 
     map.put("somedata", data); 
     map.put("age", request.getParameter("age")); 

     return "somepage"; 
    } 

जबकि दृश्य पर डेटा तक पहुँचने,

<table> 
    <tr> 
     <td>name</td> 
     <td>${somedata.name}</td> 
    </tr> 
    <tr> 
     <td>age</td> 
     <td>${age}</td> 
    </tr> 
</table> 

somedata सेम जो नाम संपत्ति प्रदान करता है और उम्र है स्पष्ट रूप से नियंत्रक द्वारा विशेषता सेट करें।

+0

thanx यह – Azuu

1

यदि कोई अन्य वर्ग (बीन) बनाना नहीं चाहता है, हालांकि यह वहां होना चाहिए, तो @ModelAttrbute के अलावा कोई भी @RequestParam का उपयोग कर सकता है। इस उदाहरण के लिए

public String someAction(@RequestParam("somedata") String data) 
{ 
------ 
} 
+1

तुम भी @RequestParam एनोटेशन बाहर छोड़ दिया जा सकता है अनुरोध पैरामीटर नाम विधि पैरामीटर नाम से मेल खाती है, तो मेरी समस्या हल –

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