【问题标题】:how to store session data in spring 3spring 3中如何存储会话数据
【发布时间】:2013-06-24 04:00:00
【问题描述】:

我正在使用 spring 3 mvc,基于注释。

我在类级别和方法级别使用@sessionattribute 和@Modelattribute 注释来存储会话数据。

它工作正常。但是

与会话对象属性同名的 http 请求属性值在会话对象中被覆盖。

如何避免这种情况?现在我必须切换到传统的 session.getAttribute 管理会话数据的方式,这在 spring 世界中并不令人印象深刻。

在控制器和视图中存储和检索会话数据的最佳做法是什么?

有什么帮助吗?

【问题讨论】:

  • 您能否给我们提供“同名会话对象被覆盖”的小代码示例并阐明您要实现的目标

标签: spring session store


【解决方案1】:

这是我的代码示例...(请原谅我的格式不正确...)

@控制器

@SessionAttributes({“用户”})

@RequestMapping("/login")

公共类 LoginController 扩展 SuperController {

@RequestMapping(value = "/submitLogin", method = RequestMethod.POST)
public ModelAndView login(
        @Valid @ModelAttribute("loginForm") LoginForm loginForm,
        BindingResult bindingResult, HttpSession session, Model model) {

                    // Adding user object to session after login.
                    modelAndView.addObject("user", user ); 

@控制器

@SessionAttributes({ "suser" })

@RequestMapping("/user")

公共类 UserController 扩展 SuperController{

@RequestMapping(value = "/createTeamMember", method = RequestMethod.POST)
public ModelAndView createTeamMember(@Valid @ModelAttribute("userForm"),  MemberUserForm memberUserForm,  BindingResult bindingResult, @ModelAttribute("user") User user) {

memberUserForm.getFirstName(); // 新团队成员的名字。

user.getFirstName(); // 登录用户的名字(与上面不同)。

由于我使用的是@sessionAttributes,所以在它调用 createTeamMember 之前,user.firstName 会在 spring 之前被 memberUserForm.getFirstName() 覆盖,而我不打算这样做......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-08
    • 2010-11-24
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    相关资源
    最近更新 更多