@ModelAttribute сформированная модель не может быть использована в другом контроллере - PullRequest
2 голосов
/ 27 декабря 2011

My UserController.java

@Controller
@RequestMapping("/userRegistration")
public class UserController{

    @RequestMapping(method = RequestMethod.GET)
    public String showForm(ModelMap model) {
        User user = new User();
        model.addAttribute(user);
        return "userForm";
    }

@RequestMapping(method = RequestMethod.POST)
public String onFormSubmit(@ModelAttribute("user") User user) {   // **#1**
    return "redirect:userSuccess.htm";                // **#2**
    }

}

My SuccessController.java

@Controller
public class SuccessController {

    @RequestMapping("/userSuccess.htm")
    public String getSuccessPage(@ModelAttribute("user") User user){       // **#3**
        return "userSuccess";
    }
}

Я не получаю "user" модель в SuccessController и поэтому, когда я использую ${user.name} в userSuccess.jsp, я не получаю никакого значения.

Когда я устанавливаю модель пользователя в строке 1, почему я не получаю это значение в другом контроллере? Если я сохраню эту модель в сеансе, используя @SessionAttributes, я смогу получить к ней доступ через другой контроллер.

Тогда каков охват моделей, сформированных с использованием @ModelAttribute?

1 Ответ

3 голосов
/ 27 декабря 2011

Это в запросе, если не изменено с @SessionAttributes как , описанным здесь .(Остальные случаи описаны здесь .) Вы делаете перенаправление - атрибуты запроса теряются;это новый запрос.

Вы ответили на свой вопрос в тексте: когда вы держите его в сеансе, он доступен через контроллеры и перенаправления, потому что он в сеансе.Если вы не держите его в сеансе, это не так.

...