2010-12-08 12 views
7

क्यों वसंत मेरे नेस्टेड ऑब्जेक्ट पर मूल्यों को बाध्य नहीं कर रहा है?वसंत 3.0 एमवीसी बाध्यकारी नेस्टेड ऑब्जेक्ट

पंजीकरण बीन पर सुरक्षा क्वेस्टियन ऑब्जेक्ट को दृश्य में उत्तर और उत्तर के रूप में सेट किया गया है, फिर दृश्य में बीन नोटेशन का उपयोग करके फ़ॉर्म में सेट करने के बावजूद।

बीन्स:

public class SecurityQuestion { 
    SecurityQuestionType type; 
    String answer; 
} 

public class RegistrationBean { 
    @Valid 
    SecurityQuestion securityQuestion; 
    String name; 


    public SecurityQuestionType[] getSecurityQuestionOptions() { 
    return SecurityQuestionType.values(); 
    } 
} 

दृश्य:

<form:form modelAttribute="registrationBean" method="POST"> 
    <form:select id="securityQuestion" path="securityQuestion.question"> 
    <c:forEach var="securityQuestionOption" items="${securityQuestionOptions}"> 
     <form:option value="${securityQuestionOption}">${securityQuestionOption</form:option> 
    </c:forEach> 
    </form:select> 

    <form:input id="securityAnswer" path="securityQuestion.answer" /> 
    <form:input id="name" path="name" /> 
</form:form> 

नियंत्रक:

@RequestMapping(value = URL_PATTERN, method = RequestMethod.POST) 
public ModelAndView submit(@Valid final RegistrationBean registrationBean) { 
    // registrationBean.getSecurityQuestion().getQuestion() == null 
    // registrationBean.getSecurityQuestion().getAnswer() == null 
} 

समाधान

सभी बीन्स के पास सभी क्षेत्रों के लिए गेटर्स/सेटर्स होना चाहिए। वसंत डिफ़ॉल्ट कन्स्ट्रक्टर का उपयोग करता है और फिर ऑब्जेक्ट को दृश्य से बदलने के लिए सेटर्स का उपयोग करता है।

+0

सुरक्षा प्रश्न में प्रश्न विशेषता अनुपलब्ध है (मुझे लगता है कि ऐसा इसलिए है क्योंकि आप इसे प्रश्न में लिखना भूल गए हैं)। क्या आपके पास गुणों के लिए गेटर्स और सेटर्स हैं? – Javi

उत्तर

7

क्या आप पंजीकरणबीन को उचित गेटर/सेटर देने का प्रयास कर सकते हैं।

public class RegistrationBean { 
    @Valid 
    SecurityQuestion securityQuestion; 
    String name; 

    public SecurityQuestion getSecurityQuestion(){ 
     return securityQuestion; 
    } 
    public void setSecurityQuestion(SecurityQuestion q){ 
     this.securityQuestion = q; 
    }  
    public SecurityQuestionType[] getSecurityQuestionOptions() { 
    return SecurityQuestionType.values(); 
    } 
} 
संबंधित मुद्दे