Spring 3.0 set and get session attribute

本小妞迷上赌 提交于 2019-11-28 03:12:57
skaffman

The code you've shown should work - the HttpSession is shared between the controllers, and you're using the same attribute name. Thus something else is going wrong that you're not showing us.

However, regardless of whether or not it works, Spring provides a more elegant approach to keeping your model objects in the session, using the @SessionAttribute annotation (see docs).

For example (I haven't tested this, but it gives you the idea):

@Controller
@RequestMapping("/welcome.htm")
@SessionAttributes({"user"})
public class WelcomeController {
    @RequestMapping(method = RequestMethod.POST)
    public String processSubmit(ModelMap modelMap){
       User user = loginService.loginUser(loginCredentials);
       modelMap.addtAttribute(user);
       return "loginSuccess";
    }
}

and then

@Controller
@SessionAttributes({"user"})
public class InspectionTypeController {

   @RequestMapping(value="/addInspectionType.htm", method = RequestMethod.POST )
   public void addInspectionType(InspectionType inspectionType, @ModelAttribute User user) {
      System.out.println("User: "+ user.getUserDetails().getFirstName);
   }
} 

However, if your original code isn't working, then this won't work either, since something else is wrong with your session.

@SessionAttributes works only in context of particular handler, so attribute set in WelcomeController will be visible only in this controller.

Use a parent class to inherit all the controllers and use SessionAttributes over there. Just that this class should be in the package scan of mvc.

May be you have not set your UserVO as Serializable.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!