Весна 3. 0 Связывание вложенного объекта MVC

Почему Spring не привязывает значения к моему вложенному объекту?

Для объекта SecurityQuestion в RegistrationBean задается вопрос и ответ как null, null, соответственно, несмотря на то, что он задан в форме с использованием нотации bean-компонента в представлении.

Компоненты:

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
}

Решение

Все компоненты должны иметь геттеры / сеттеры для всех полей. Spring использует конструктор по умолчанию, а затем использует сеттеры для изменения объекта из представления.

7
задан naXa 5 December 2017 в 15:34
поделиться