Spring 3.0 objet imbriqué MVC de liaison
-
10-10-2019 - |
Question
Pourquoi le printemps ne lie pas les valeurs sur mon objet imbriqué?
L'objet SecurityQuestion sur le RegistrationBean est réglé à la question et la réponse comme null, null, respectivement, en dépit de la mise alors sous forme en utilisant la notation de haricots dans la vue.
Beans:
public class SecurityQuestion {
SecurityQuestionType type;
String answer;
}
public class RegistrationBean {
@Valid
SecurityQuestion securityQuestion;
String name;
public SecurityQuestionType[] getSecurityQuestionOptions() {
return SecurityQuestionType.values();
}
}
Voir:
<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>
Contrôleur:
@RequestMapping(value = URL_PATTERN, method = RequestMethod.POST)
public ModelAndView submit(@Valid final RegistrationBean registrationBean) {
// registrationBean.getSecurityQuestion().getQuestion() == null
// registrationBean.getSecurityQuestion().getAnswer() == null
}
Solution
Tous les haricots doivent avoir getters / setters pour tous les champs. Spring utilise le constructeur par défaut et utilise ensuite les setters de muter l'objet de la vue.
La solution
Pouvez-vous essayer de donner le RegistrationBean un getter / setter approprié.
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();
}
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow