Warum bindet Frühling die Werte auf meinem verschachtelten Objekt nicht?Feder 3.0 MVC-Bindung verschachteltes Objekt
Das SecurityQuestion-Objekt auf der RegistrationBean wird mit Frage und Antwort als null bzw. null gesetzt, trotz der Einstellung in Form, die Bean-Notation in der Ansicht verwendet.
Bohnen:
public class SecurityQuestion {
SecurityQuestionType type;
String answer;
}
public class RegistrationBean {
@Valid
SecurityQuestion securityQuestion;
String name;
public SecurityQuestionType[] getSecurityQuestionOptions() {
return SecurityQuestionType.values();
}
}
Ausblick:
<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>
Controller:
@RequestMapping(value = URL_PATTERN, method = RequestMethod.POST)
public ModelAndView submit(@Valid final RegistrationBean registrationBean) {
// registrationBean.getSecurityQuestion().getQuestion() == null
// registrationBean.getSecurityQuestion().getAnswer() == null
}
Lösung
Alle Beans müssen Getter/Setter für alle Felder haben. Spring verwendet den Standardkonstruktor und verwendet dann die Setter, um das Objekt aus der Ansicht zu ändern.
Frage-Attribut fehlt in SecurityQuestion (ich nehme an, es ist, weil Sie vergessen haben, es in der Frage zu schreiben). Haben Sie Getter und Setter für die Attribute? – Javi