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를 사용하여 뷰에서 객체를 변경합니다.
Question 속성이 SecurityQuestion에서 누락되었습니다 (질문에 답을 잊어 버렸기 때문에). 속성에 대한 getter 및 setter가 있습니까? – Javi