Я думаю, что смущен немного об аннотации сессии пружиной 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 опции
Я нахожусь все еще на ранней стадии изучения Spring очень жаль, если что-то очень очевидное, я просто наклон видит его.
PS - то, что даже хороший способ решить этот вид формы пружиной mvc или Вы повторно прокомментировали бы другой подход?
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
Согласно Справочное руководство Primpry 3.0 , похоже, @sessionattributes предназначен для использования на типе, который вы хотите хранить прозрачно на сеансе, например, «команда» или объект формы. Я не думаю, что вы захотите хранить контроллер в сеансе.
Попробуйте проверить здесь:
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";
}
}