2012-04-17 13 views
7

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

public class Person { 
private String _firstName; 
private String _lastName; 
private Date _Birthday; 

//Set 
public void setFirstName(String FirstName){this._firstName = FirstName; } 
public void setLastName(String LastName){this._lastName= LastName; } 
public void setBirthDate(Date BirthDate){ this._Birthday = BirthDate;} 

//get 
public String getFirstName(){return _firstName;} 
public String getLastName(){return _lastName;} 
public Date getBirthDate(){return _Birthday;} 
} 

देखें चाहते

नियंत्रक

@Controller 
public class HomeController { 

    @RequestMapping(value = "/", method = RequestMethod.GET) 
    public String home(Model model) { 

     model.addAttribute(new Person()); 
     return "home"; 
    } 

    @RequestMapping(value="/about", method=RequestMethod.POST) 
    public void about(Person person, Model model) 
    { 
     model.addAttribute("person", person); 
    } 
} 

कक्षा: यहाँ मैं अब तक है! कार्य

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 
<html> 
</head> 
    <body> 
     FirstName: ${model.person.getFirstName} 
     LastName: ${model.person.getLastName} 
    </body> 
</html> 

इसे बांधने के लिए मुझे क्या चाहिए या इसकी आवश्यकता है?

उत्तर

7

मॉडल विशेषता वह चीज़ है जिसे आप यहां याद कर रहे हैं।

@Controller 
public class HomeController { 

    @ModelAttribute("person") 
    public Person getPerson(){ 
     return new Person();   
    } 

    @RequestMapping(value = "/", method = RequestMethod.GET) 
    public String home() { 
     return "home"; 
    } 

    @RequestMapping(value="/about", method=RequestMethod.POST) 
    public void about(@ModelAttribute("person") Person person, BindingResult result, Model model) 
    { 
     if(! result.hasErrors()){ 
      // note I haven't compiled this code :) 
     } 
    } 
} 

विचार है कि @ModelAttribute विधि दोनों प्राप्त और पोस्ट पर लागू किया जाएगा, GET अनुरोध पर यह सिर्फ दृश्य जहां पोस्ट पर के रूप में यह बाध्य करने के लिए उपयोग किया जाएगा के संपर्क में हो जाएगा अनुरोध पैरामीटर।

ध्यान दें कि BindingResult पोस्ट विधि पर भेज दिया गया है, ताकि आप कमांड के साथ कुछ कर सकें।

1

1) मॉडलमैप की सामग्री जेएसपी में निहित है। जब आप उन्हें एक्सेस करते हैं तो आपको 'मॉडल' निर्दिष्ट करने की आवश्यकता नहीं होती है।

2) जेएसपी-ईएल बीन संपत्ति एक्सेसर्स के माध्यम से फ़ील्ड का उपयोग करता है, विधियों का आह्वान नहीं करता है। आप वास्तविक विधि को कॉल करने के लिए 'get' निर्दिष्ट नहीं करते हैं। आप बीन संपत्ति का नाम उपयोग करते हैं। उदाहरण के लिए, व्यक्ति का परिणाम प्राप्त करने के लिए $ {person.firstName} .getFirstName();

@RequestMapping(value = "/", method = RequestMethod.GET) 
public String home(Model model) { 
    Person person = new Person(); 
    person.setFirstName("Kai"); 
    person.setLastName("Cooper"); 
    model.addAttribute("person", person); 
    return "home"; 
} 

`

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 
<html> 
</head> 
    <body> 
     FirstName: ${person.firstName} 
     LastName: ${person.lastName} 
    </body> 
</html> 
+0

' < इनपुट प्रकार = "सबमिट करें" मान = "सबमिट करें" /> ' होम.जेएसपी, मैं व्यू टू कंट्रोलर से बांध सकता हूं। पूरी तस्वीर के लिए। धन्यवाद –

1

आप व्यक्ति वस्तु के रूप में अच्छी तरह से बदलने की जरूरत है, गुण एक" _ "उससे पहले नहीं होना चाहिए। "_firsName" को "firstName" में बदलें। गेटटर, सेटर ठीक है। वसंत बाध्यकारी विशेषता नामों द्वारा उनके संबंधित गेटर और सेटर के लिए जाता है।

इसके अलावा दृश्य में पहुंचने के तरीके को भी बदलें। $ {Person.firstName} की तरह उपयोग करें। आपको "person.firstName" से पहले "मॉडल" की आवश्यकता नहीं है और आपको फर्स्टनाम का उल्लेख करने की आवश्यकता नहीं है, वसंत स्वचालित रूप से आपके लिए करता है।

1

कृपया अपने व्यक्ति वर्ग चर, गेटर और सेटर विधियों का नामकरण जांचें। गेटर विधि 'प्राप्त करें' और अपने चर नाम के पहले पूंजी अक्षर और दूसरे अक्षर के लिए एक ही मामला के साथ शुरू होना चाहिए उदाहरण के लिए: getFirstName() और सेटर विधि को गेटर विधि भी पसंद करनी चाहिए। यदि आपके गेटर और सेटर विधियों के नामकरण सम्मेलन अलग हैं, बाध्यकारी ठीक से काम नहीं करता है। यहां आपकी व्यक्तिगत श्रेणी का अद्यतन संस्करण है।

public class Person { 
    private String firstName; 
    private String lastName; 
    private Date Birthday; 

    //Set 
    public void setFirstName(String FirstName){this.firstName = FirstName; } 
    public void setLastName(String LastName){this.lastName= LastName; } 
    public void setBirthDate(Date BirthDate){ this.Birthday = BirthDate;} 

    //get 
    public String getFirstName(){return firstName;} 
    public String getLastName(){return lastName;} 
    public Date getBirthDate(){return Birthday;} 
} 
संबंधित मुद्दे