Spring 3 MVC: переместить / поделиться моделью из Controler в другой Controler - PullRequest
0 голосов
/ 29 апреля 2011

Я делаю небольшой проект с Spring 3 MVC & jQuery

Я не уверен, как спросить его, поэтому я попытаюсь объяснить

У меня есть такой сценарий:

LoginPage (с объектной моделью User) --- submit -> Сервер отправляет OK обратно на LoginPage -> (LoginPage) перенаправить на страницу Page2, используя window.location = "Page2"

Проблема: Страница 2 не распознает пользователя

Как заставить это работать?Я попытался прочитать о @SessionAttributes, но не совсем понял.

@Controller
public class LoginController {
...
...
    @RequestMapping(value = "/")
    public ModelAndView  loginPage(ModelMap model) {
        model.addAttribute("user", new User());
        logger.info("Loading Login Page");
        return new ModelAndView("login");   
    }


      @RequestMapping(value = "/loginSubmit.html" ,method=RequestMethod.GET)
      public String processSubmit( ModelMap model,  User user) throws InterruptedException{
      ...
      ...
      return "1" to login page
      ...
      ...

Здесь я хочу, чтобы пользователь User был известен с последнего контроллера, но вместо этого он создает нового.

@Controller
public class Controller2 {
    @RequestMapping(value = "/home")
    public String home(ModelMap model, User user) {
        ...
        ...
}

LoginPage.jsp

    $.get("loginSubmit.html", form1Var.serialize(), function(data){
      var isSucess = data.charAt(0) == "1" ? true : false;   
      if ( isSucess == true) {
          alert("ok...");
          window.location = "home";
      } 

РЕДАКТИРОВАТЬ Переместил мое решение в Ответы.

Ответы [ 2 ]

1 голос
/ 30 апреля 2011

Мое решение:

@SessionAttributes("user")

на обоих контроллерах

и

@ModelAttribute("user") User user 

в качестве параметра в методе - сработало

I'vтакже добавлено

@ExceptionHandler(HttpSessionRequiredException.class)
public String SessionException(HttpSessionRequiredException ex) {
    logger.info(ex.getMessage());
    return "redirect:LogIn";
}

, чтобы поймать Exception, и пользователь перейдет на страницу входа в систему вместо страницы ошибки исключения

Как указал Донал Бойл, вывод: используйте @SessionAttributes для обмена моделями между контроллерами

1 голос
/ 29 апреля 2011

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

В найденном решении аннотация @SessionAttributes ("пользователь") сообщает Spring MVC, что вы хотите, чтобы пользовательский объект сохранялся в запросах, сохраняя его в сеансе. Вот как Spring отвлекает вас от всей работы по собственному поддержанию состояния.

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