2016-08-25 5 views
0

Ich möchte Login-Nachricht an eine andere Methode teilen, aber weiß nicht wie. So habe ichKann ModelMap nicht zur Sitzung hinzufügen

Feder Anmerkung @SessionAttributes in Controller und versuchen addAttribute zu

speichern user zu ModelMap. Aber wenn ich @ModelAttribute in einem anderen Verfahren verwendet,

meinem Browser geworfen: 500 - Expected session attribute 'user'

Hier ist mein Controller:

@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"; 
     } 

    } 

Muss ich web.xml konfigurieren.

Antwort

0

Entfernen Sie @ResponseBody von der Login-Methode. Wenn Sie @ResponseBody verwenden, wird der Rückgabewert direkt in die Antwort geschrieben. Spring konnte in diesem Fall keine Zeit zum Erstellen des Sitzungsobjekts und zum Speichern im Modellattribut erhalten.

+0

Es hat funktioniert, aber ich muss etwas Code in '$ .ajax' hinzufügen. Kann ich Modelattribute und '@ ResponseBody' gleichzeitig verwenden? Ist es möglich. –

+0

Ich habe deine Frage nicht bekommen. Was willst du erreichen? – abaghel

+0

Wenn ich "@ ResponseBody" verwende, kann ich meinen "Benutzer" im Session-Objekt speichern? –

Verwandte Themen