Когда я использую контроллер 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 пользовательский сеанс в контроллере пост-метода только для изменения измененных полей? Существует ли общий метод?