2011-11-28 66 views
1

我使用session.setAttribute来登录后存储用户对象。在下一个控制器中,对于同一用户,我有@SessionAttribute,对于映射到RequestMapping的方法中使用的同一对象,我有@ModelAttribute。如果我点击在用户主页的任何链接登录后,它给Spring MVC 3.0中的会话处理

HttpSessionRequiredException:会话属性“”必需的 - 会议

没有发现我不知道我做错了。我在这个网站上浏览了很多文章和问题,但可以找到任何解决方案。我在会话中存储的用户对象存储用户的帐户详细信息,这是所有控制器中要求从DB获取不同信息的帐户详细信息。如果我在所有控制器中使用HttpSession,并使用SessionAttribute错误,并且手动从会话中获取对象,或者在3.0版中有合适的方法来处理。请注意,此用户对象不支持任何形式,只是登录,但包含许多其他细节。

因为帮助会很好。

回答

0

看一看我的(非完美)使用会话的数据:

@Controller 
@SessionAttributes("sharedData") 
public class RegistrationFormController { 

    @Autowired 
    private SharedData sharedData; // bean with scope="session" 

    @RequestMapping(value = {"/registrationForm"}, method = RequestMethod.GET) 
    public ModelAndView newForm() { 
     final ModelAndView modelAndView = new ModelAndView("registrationForm"); 

     modelAndView.addObject("registrationForm", new RegistrationForm()); 
     // I want to render some data from this object in JSP: 
     modelAndView.addObject("sharedData", sharedData); 

     return modelAndView; 
    } 

    @RequestMapping(value = {"/registrationForm"}, method = RequestMethod.POST) 
    public String onRegistrationFormSubmitted(HttpServletRequest request, 
       @ModelAttribute("registrationForm") RegistrationForm registrationForm, BindingResult result) { 
     if (result.hasErrors()) { 
      return "registrationForm"; 
     } 

     // Perform business logic, e.g. persist registration data 

     return "formSubmitted"; 
    } 
} 
+0

嗨dma_k我想这不会有帮助我的情况,因为我有用户详细信息存储在会话。在你的例子中,我存储sharedData,我不能做,因为用户的细节不能共享。 – Amit

+0

@Amit:你如何创建你的初始用户细节?例如。工厂方法'UserDetials createUserDetails(...){}'签名是怎么样的? –