2010-11-06 9 views
7

एक रूप की आवश्यकता है मेरे पास है:वसंत-MVC: फार्म प्रसंस्करण, बंधन का सबसे सरल उदाहरण है, और मान्यता

public class Person { 
    private String firstname; 
    private String lastname; 
    // ... getters & setters ... 
} 

मैं प्राप्त करना चाहते हैं:

<form action="/processform"> 
    <input name="firstname" value="john" /> 
    <input name="lastname" value="doe" /> 
</form> 

मैं एक व्यक्ति वस्तु है यह डेटा, उस पर सत्यापन करें, और इसे डेटास्टोर पर पोस्ट करें।

मैं ऐसा करने के लिए नियंत्रक कैसे लिखूं? मैं समझता हूं कि मैं मापदंडों को अनुरोध पैरामीटर के रूप में पास कर सकता हूं, लेकिन मुझे लगता है कि ऐसा करने का "उचित" तरीका किसी भी तरह से फ़ॉर्म से डेटा ऑब्जेक्ट को बाध्य करता है और फिर उस व्यक्ति ऑब्जेक्ट को नियंत्रक में प्राप्त करता है और मान्य ऑब्जेक्ट को कॉल करता है जो व्यक्ति वस्तु प्राप्त करने के लिए कॉन्फ़िगर किया गया है।

बहुत पढ़ने के बाद, इस कदम ने मुझे भ्रमित कर दिया है। क्या कोई मुझे दिखा सकता है कि डेटा को "बाध्य" करने के लिए क्या आवश्यक है, "मान्य करें" (उदा। एक वैधकर्ता), और डेटा को "प्रक्रिया" (उदा। नियंत्रक, और विशेष रूप से पैरामीटर के रूप में इसे पास किया जाता है)?

उत्तर

12

यहाँ जवाब मैं खोज रहा था, मैं समझ में नहीं आया कि स्प्रिंग, डिफ़ॉल्ट रूप से, मानकों के सभी रूप से ले जाएगा था: आप से यह भी देख सकते हैं सबमिशन (जैसे "firstname" और "lastname") और इन पैरामीटर के सेटटर विधियों को कॉल करके आपके लिए ऑब्जेक्ट बना सकते हैं।

नियंत्रक:

@Controller 
public class MyFormProcessor { 
    @RequestMapping("/formsubmit") 
    public String handleForm(@Valid Person person, BindingResult errors, Map<String,Object> model){ 
     // ...handle form... 
    } 
} 

स्प्रिंग अनिवार्य रूप से (की तुलना में मैं इस सरल उदाहरण के लिए को दर्शाती एक और अधिक बढ़ाई तरह से स्पष्ट रूप से) इस अनुरोध के लिए handleForm कॉल करने से पहले निम्न जादू कर रही है:

Person person = new Person(); 
person.setFirstname(request.getParameter("firstname")); 
person.setLastname(request.getParameter("lastname")); 
handleForm(person, anErrorsObject, new Model()); 

सत्यापन के लिए आप या तो अपना स्वयं का सत्यापनकर्ता बना सकते हैं (जिसे मैं यहां कुछ भी नहीं बताऊंगा), या यदि आप कक्षा में हाइबरनेट वैलिडेटर शामिल करते हैं, तो आप Person कक्षा (नीचे उदाहरण) को एनोटेट कर सकते हैं और जब आप डीडी @Valid एनोटेशन जैसा कि मैंने हाइबरनेट सत्यापनकर्ता के ऊपर दिए गए उदाहरण में चित्रित किया है, उन एनोटेशन के आधार पर कक्षा को मान्य करेगा और त्रुटि ऑब्जेक्ट में कोई त्रुटि पोस्ट करेगा (BindingResult ऑब्जेक्ट स्प्रिंग्स का विस्तार है 'Errors, और सरल उदाहरणों के लिए Errors ऑब्जेक्ट है दिलचस्प घटक)।

JSR-303 मान्यता एनोटेट व्यक्ति वर्ग (@Valid विकल्प के साथ उपयोग के लिए):

public class Person { 
    @NotNull 
    @Size(min=3, max=20) 
    private String firstname; 

    @NotNull 
    @Size(min=3, max=20) 
    private String lastname; 

    // ... getters & setters ... 
} 
2

वसंत में आपके पास आवश्यक हर पहलू को दिखाते हुए एक संपूर्ण ट्यूटोरियल है। इसे "पेटक्लिनिक" कहा जाता है।

Git https://github.com/SpringSource/spring-petclinic

+0

ठीक है, 2 विशिष्ट प्रश्न मुझे लगता है कि मैं अभी तक लोभी नहीं कर रहा हूँ: 1) osspetclinic.web में। FindOwner प्रक्रिया को फर्म करें सबमिट करें विधि किसी ऑब्जेक्ट ऑब्जेक्ट को स्वीकार करती है। वसंत ने उस वस्तु को बनाने के लिए कुछ किया, यह क्या किया? 2) osspetclinic.web.AddPetForm में प्रक्रिया सबमिट करें() विधि एक मॉडल एट्रिब्यूट ("पालतू") स्वीकार करती है, मुझे विश्वास है कि मैं समझता हूं कि इसका मतलब है कि प्रविष्टि <"पालतू", ऑब्जेक्ट> इस विधि को कॉल करने से पहले मॉडल में जोड़ा गया था , लेकिन यह किसने किया ?? –

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