Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring Framework 3 and session attributes

Tags:

I have form object that I set to request in GET request handler in my Spring controller. First time user enters to page, a new form object should be made and set to request. If user sends form, then form object is populated from request and now form object has all user givern attributes. Then form is validated and if validation is ok, then form is saved to database. If form is not validated, I want to save form object to session and then redirect to GET request handling page. When request is redirected to GET handler, then it should check if session contains form object.

I have figured out that there is @SessionAttributes("form") annotation in Spring, but for some reason following doesnt work, because at first time, session attribute form is null and it gives error:

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

Here is my controller:

@RequestMapping(value="form", method=RequestMethod.GET) public ModelAndView viewForm(@ModelAttribute("form") Form form) {     ModelAndView mav = new ModelAndView("form");           if(form == null) form = new Form();     mav.addObject("form", form);     return mav; }  @RequestMapping(value="form", method=RequestMethod.POST) @Transactional(readOnly = true) public ModelAndView saveForm(@ModelAttribute("form") Form form) {     FormUtils.populate(form, request);     if(form.validate())     {         formDao.save();              }     else      {         return viewForm(form);     }     return null; } 
like image 844
newbie Avatar asked May 03 '10 09:05

newbie


People also ask

What is session attribute in spring?

SessionAttribute annotation is the simplest and straight forward instead of getting session from request object and setting attribute. Any object can be added to the model in controller and it will stored in session if its name matches with the argument in @SessionAttributes annotation.

What are session attributes?

A session attribute is a pre-defined variable that is persistent throughout the life of a Tealeaf session. Session attributes can be used to store various data that may be referenced by events at any point during the session.

How session is maintained in Spring MVC?

Have a look at the @SessionAttributes annotation, which allows you to define the attributes that will be stored in the session by your controller; this mechanism is mainly intended to maintain the conversational state for your handler and that state is usually cleared once the conversation is complete.


1 Answers

It throws Exception if controller called first time even though added @SessionAttributes({"form"}) to class. So add following populateForm method will fix this.

@SessionAttributes({"form"}) @Controller public class MyController {     @ModelAttribute("form")    public Form populateForm() {        return new Form(); // populates form for the first time if its null    }     @RequestMapping(value="form", method=RequestMethod.GET)    public ModelAndView viewForm(@ModelAttribute("form") Form form) {        ModelAndView mav = new ModelAndView("form");              if(form == null) form = new Form();        mav.addObject("form", form);        return mav;    }     @RequestMapping(value="form", method=RequestMethod.POST)    @Transactional(readOnly = true)    public ModelAndView saveForm(@ModelAttribute("form") Form form) {       // ..etc etc    } } 
like image 76
digz6666 Avatar answered Oct 07 '22 14:10

digz6666