2016-08-25 85 views
0

我想將登錄消息分享給其他方法,但不知道如何。所以我用無法將ModelMap添加到會話中

春天註釋@SessionAttributes的控制器,並嘗試addAttribute

保存userModelMap。但是,當我在另一種方法使用@ModelAttribute

我的瀏覽器拋出: 500 - Expected session attribute 'user'

這裏是我的控制器:

@Controller 
@RequestMapping("/login") 
@SessionAttributes("user") 
public class Login { 
    @Resource 
    private UserSer userSer; 

    @RequestMapping("/main") 
    @ResponseBody 
    public String login (@RequestBody User user, ModelMap map) { 
     boolean result = userSer.login(user); 
     String view = "fail"; 

     if(result) { 
      map.addAttribute("user", user); 
      view = "success"; 
     } 

     return view; 
    } 


     //It doesn't work 
     @RequestMapping("/logout") 
     public String logout(@ModelAttribute("user") User user) { 
      System.out.println(user.getUsername()); 
      return "success"; 
     } 

    } 

我需要配置web.xml中。

回答

0

從登錄方法中刪除@ResponseBody。當您使用@ResponseBody時,返回值會直接寫入響應。在這種情況下,Spring無法騰出時間來創建Session對象並保存到模型屬性中。

+0

它的工作,但我需要在'$ .ajax'中添加一些代碼。我可以同時使用模型屬性和'@ ResponseBody'嗎?可能嗎。 –

+0

我沒有得到你的問題。你想實現什麼? – abaghel

+0

如果我使用'@ ResponseBody',我可以將'user'保存到Session對象嗎? –