2010-12-08 3 views
7

내 중첩 된 객체의 값을 봄 바인딩하지 않는 이유는 무엇입니까?봄 3.0 MVC 바인딩 중첩 된 객체

RegistrationBean의 SecurityQuestion 객체는 뷰의 빈 표기법을 사용하는 형식으로 설정 한 경우에도 각각 질문과 대답이 null, null로 설정됩니다.

콩 :

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 
} 

솔루션

모든 빈은 모든 필드에 대해 getter/setter를 가져야합니다. Spring은 기본 생성자를 사용하고 setter를 사용하여 뷰에서 객체를 변경합니다.

+0

Question 속성이 SecurityQuestion에서 누락되었습니다 (질문에 답을 잊어 버렸기 때문에). 속성에 대한 getter 및 setter가 있습니까? – Javi

답변

7

RegistrationBean에 적절한 getter/setter를 제공 할 수 있습니까?

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(); 
    } 
}