Default objects in spring 3 mvc SessionAttributes when session expired

14,594

Solution 1

1.i create empty objects if missing in session and accept submit

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

Solution 2

Try to check here:

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";
    }
}
Share:
14,594
Art79
Author by

Art79

Born developer. Born in Poland, living in Sydney after 5 years in Ireland. Web technologies in general (PHP is my specialty).

Updated on June 11, 2022

Comments

  • Art79
    Art79 almost 2 years

    I think im confused a bit about session annotation in spring mvc.

    I have code like this (2 steps form sample, step 1 user data, step 2 address)

    @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";
            }
    
    // .........
    }
    

    Now if i submit page after my session expires i get error

    org.springframework.web.HttpSessionRequiredException: Session attribute 'user' required - not found in session

    How do i handle it? i would like to have 2 options

    1. i create empty objects if missing in session and accept submit
    2. i forward back to user form with some message

    Im still in early stage of learning Spring so sorry if its something very obvious, i just cant see it.

    ps. is that even the good way to solve this kind of form in spring mvc or would you recomment different approach?