Весенние объекты по умолчанию 3 mvc SessionAttributes, когда сессия истекла - PullRequest
7 голосов
/ 19 января 2010

Я думаю, что я немного запутался насчет аннотации сессии весной mvc.

У меня есть такой код (пример формы из 2 шагов, пользовательские данные шага 1, адрес шага 2)

@SessionAttributes({"user", "address"})
public class UserFormController {

    @RequestMapping(method = RequestMethod.GET)
    public ModelAndView show( ModelAndView mv ){
        mv.addObject( new User() );
        mv.addObject( new Address() );
        mv.setViewName("user_add_page");
        return mv;
    }

    @RequestMapping(method = RequestMethod.POST)
    public String processForm( User user, BindingResult result ){
        new UserValidator().validate(user, result);
        if( result.hasErrors() ){
            return "user_add_page";
        }else{
            return "redirect:/user_form/user_add_address";
        }

// .........
}

Теперь, если я отправляю страницу после истечения моего сеанса, я получаю ошибку

org.springframework.web.HttpSessionRequiredException: Требуется атрибут сеанса «пользователь» - не найден в сеансе

Как мне справиться с этим? я хотел бы иметь 2 варианта

  1. я создаю пустые объекты, если отсутствует в сеансе, и принимаю submit
  2. я пересылаю обратно в форму пользователя с некоторым сообщением

Я все еще на ранней стадии изучения Spring, извините, если это что-то очень очевидное, я просто не могу этого увидеть.

пс. Это даже хороший способ решить эту форму весной MVC или вы бы порекомендовали другой подход?

Ответы [ 3 ]

4 голосов
/ 19 января 2010

1.i создайте пустые объекты, если они отсутствуют в сеансе, и подтвердите отправку

Используйте метод, аннотированный @ModelAttribute("user"), чтобы предоставить значение по умолчанию

2.i переслать обратно в форму пользователя с некоторым сообщением

Использовать @ExceptionHandler(HttpSessionRequiredException.class) -аннотированный метод

1 голос
/ 31 марта 2010

Попробуйте проверить здесь:

http://forum.springsource.org/showthread.php?t=63001&highlight=HttpSessionRequiredException

@Controller
@RequestMapping(value="/simple_form")
@SessionAttributes("command")
public class ChangeLoginController {

  @ModelAttribute("command")
  public MyCommand createCommand() {
    return new MyCommand();  
  }

    @RequestMapping(method = RequestMethod.GET)
    public String get() {       
        return "form_view";
    }

    @RequestMapping(method = RequestMethod.POST)
    public String post(@ModelAttribute("command") MyCommand command) {
        doSomething(command); // execute business logic
        return "form_view";
    }
}
0 голосов
/ 19 января 2010

Согласно справочному руководству Spring 3.0 , похоже, что @SessionAttributes предназначен для использования с типом, который вы хотите прозрачно хранить в сеансе, таким как «Команда» или форма отступающий объект. Я не думаю, что вы захотите хранить контроллер в сессии.

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