Spring MVC 2.5 поддерживает объект формы, используя @modelAttribute - PullRequest
1 голос
/ 26 января 2011
@RequestMapping(method = RequestMethod.GET)
public String setupForm(@RequestParam("username") String username, ModelMap model, HttpServletRequest request) {
    User userFromDB = userService.getUser(username);
    UserPersonalDetails userDetails = userService.getUserPersonalDetails(username);
    UserBackingObject user = new UserBackingObject(userDetails.getFirstName() + " " + userDetails.getLastName(), username, userDetails.getEmail(), userDetails.getTelephone());
    model.addAttribute("user", user);

    return EDIT_USER_VIEW;
}


@RequestMapping(method = RequestMethod.POST, params="save")
public String processSave(@ModelAttribute("user") UserBackingObject user, BindingResult result, ModelMap model, HttpServletRequest request) {


    return LISTUSERS_VIEW;
}

в форме jsp, я только отображаю данные пользователя (не может быть отредактирован или изменен), и у меня есть кнопка отправки.

когда я отлаживаю метод post, пользовательский объект (UserBackingObject) имеет только имя пользователя, а остальные поля имеют значение null. Я не понимаю, почему это происходит, хотя я создал пользовательский объект и добавил в модель в метод «получить». так почему его не показывать адрес электронной почты или номер телефона в методе записи? цель объекта поддержки является отправлять и получать? может кто-нибудь объяснить, пожалуйста,

1 Ответ

4 голосов
/ 26 января 2011

Spring MVC использует подход без сохранения состояния.Это означает, что (по умолчанию) Spring не сохраняет состояние разговора с конкретным пользователем на сервере между запросами.

Следовательно, экземпляр UserBackingObject, полученный в методе POST, не совпадает с экземпляром, добавленным в модель в методе GET.Значение UserBackingObject, которое вы получаете в методе POST, восстанавливается из параметров HTTP метода POST, то есть из значений полей формы.Это означает, что будут заполнены только те свойства, которые имеют соответствующие поля на вашей HTML-странице.

При необходимости вы можете переопределить это поведение по умолчанию , используя @SessionAttributes annotation .

Таким образом, вы можете добавить дополнительные поля (возможно скрытые) к форме или сохранить атрибуты модели в сеансе, используя @SessionAttributes.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...