Объекты по умолчанию пружиной 3 mvc SessionAttributes, когда сессия истекла

Я думаю, что смущен немного об аннотации сессии пружиной 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. я создаю пустые объекты при пропавших без вести на сессии и принимаю, отправляют
  2. я передаю назад пользовательской форме с некоторым сообщением

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

PS - то, что даже хороший способ решить этот вид формы пружиной mvc или Вы повторно прокомментировали бы другой подход?

7
задан skaffman 19 January 2010 в 14:51
поделиться

3 ответа

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

Use @ModelAttribute("user")-annotated method to provide the default value

2.i forward back to user form with some message

Use @ExceptionHandler(HttpSessionRequiredException.class)-annotated method

.
4
ответ дан 7 December 2019 в 12:20
поделиться

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

0
ответ дан 7 December 2019 в 12:20
поделиться

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

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";
    }
}
1
ответ дан 7 December 2019 в 12:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: