Подтвердить что ты не робот

Сохранять значение в атрибуте модели для spring mvc

Когда я использую контроллер Spring MVC, и я отправляю форму, устанавливая значение в modelAttribute, я теряю некоторые из полей модели, которые не отображаются в форме. В этом примере, поскольку я не сопоставлял возраст и адрес, эти поля пользователя теряются и поэтому имеют значение null. Я не хочу, чтобы пользователь менял свой возраст и адрес, поэтому эти поля не в форме.

Контроллер метода для публикации формы редактирования пользователя:

@RequestMapping(value = "/edit", method = RequestMethod.POST)
public String editionUser(Model model, @ModelAttribute("accountForm") User user,
  BindingResult bresult,
  RedirectAttributes redirectAttributes) {
  //user.getAge() and user.getAddress are null           

  //Save the information...
}

Контроллер метода для редактирования страницы пользователя:

@RequestMapping(value = "/edit", method = RequestMethod.GET)
public String initEdit(Model model) {
  // the user fields are all filled
  User user = userService.getUserById(...);
  model.addAttribute("accountForm", user);
  return "edition";
}


class User {
  Long id;
  String email;
  String age;
  String address;
  String nickname;

  // ...
}

edition.jsp

<form:form class="form" method="POST" action="edition" modelAttribute="accountForm">
  <form:label path="email">email</form:label>
  <form:input path="email"  name='email'/>
  <form:label path="nickname">nickname</form:label>
  <form:input path="nickname"  name='nickname'/>
  <form:hidden path="id" />
  <input name="submit" type="submit"    value="valid" />  
</form:form>

Какое лучшее решение не потерять ценность этих полей? (возраст и адрес)

Использовать скрытый путь формы для каждого поля? Храните пользователя в сеансе перед перенаправлением на страницу редактирования и установите retreive пользовательский сеанс в контроллере пост-метода только для изменения измененных полей? Существует ли общий метод?

4b9b3361

Ответ 1

Я бы пошел с сессией по одной простой причине:
скрытые поля формы можно легко манипулировать на стороне клиента перед отправкой формы, поэтому они не удовлетворяют вашим требованиям.

Обратите внимание, что, не сохраняя ранее введенные значения где-то, вы даже не можете определить, были ли они подвергнуты вмешательству на стороне клиента, поэтому скрытые поля определенно не являются опцией. Использовать сеанс.

Ответ 3

Смотрите мой ответ здесь:

Возможно ли обновить только подмножество атрибутов для объекта с использованием Spring MVC с JPA?

Это должно сработать для вас. К несчастью, нет более элегантного метода.

На стороне примечания, похоже, что Spring WebFlow управляет обновлением модели только полями из сообщения. Вероятно, он хранит модель в сеансе и обновляет только значения, содержащиеся в POST.