2010-12-08 14 views
7

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.

+0

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

Antwort

7

Können Sie versuchen, der RegistrationBean einen geeigneten Getter/Setter zu geben.

Verwandte Themen