MVC de printemps: comment supprimer l'attribut session?

Exemple d'utilisation @SessionAttributes ci-dessous. Comment effacer user attribut de session après l'assistant terminé ? Dans mon exemple après un retour à /wizard0 l'attribut session existe toujours. J'ai essayé status.setComplete() et session.removeAttribute("user") mais ça ne fonctionne pas.

@Controller
@SessionAttributes("user")
public class UserWizard {

    @RequestMapping(value = "/wizard0", method = RequestMethod.GET)
    public String page1(Model model) {
        if(!model.containsAttribute("user")) {
            model.addAttribute("user", new User());
        }
        return "wizard/page1";
    }

    @RequestMapping(value = "/wizard1", method = RequestMethod.GET)
    public String page2(@ModelAttribute User user) {
        user.setFirstname(Utils.randomString());
        return "wizard/page2";
    }

    @RequestMapping(value = "/wizard2", method = RequestMethod.GET)
    public String page3(@ModelAttribute User user) {
        user.setLastname(Utils.randomString());
        return "wizard/page3";
    }

    @RequestMapping(value = "/finish", method = RequestMethod.GET)
    public String page4(@ModelAttribute User user, HttpSession session, SessionStatus status) {
        /**
         * store User ...
         */
        status.setComplete();
        session.removeAttribute("user");
        return "redirect:/home";
    }

}

EDIT

Mon erreur. status.setComplete(); fonctionne bien. session.removeAttribute("user") rien à faire ici.

17
demandé sur marioosh 2013-08-13 16:34:31

1 réponses

Essayez d'utiliser WebRequest.removeAttribute méthode au lieu de HttpSession.setAttribute méthode (exemple 1). Ou une autre façon qui font exactement la même chose, vous pouvez utiliser 'SessionAttributeStore.cleanupAttribute " (exemple 2).

exemple 1

@RequestMapping(value = "/finish", method = RequestMethod.GET)
public String page4(@ModelAttribute User user, WebRequest request, SessionStatus status) {
    /**
     * store User ...
     */
    status.setComplete();
    request.removeAttribute("user", WebRequest.SCOPE_SESSION);
    return "redirect:/home";
}

exemple 2

@RequestMapping(value = "/finish", method = RequestMethod.GET)
public String page4(@ModelAttribute User user, WebRequest request, SessionAttributeStore store, SessionStatus status) {
    /**
     * store User ...
     */
    status.setComplete();
    store.cleanupAttribute(request, "user");
    return "redirect:/home";
}
10
répondu michal.kreuzman 2013-08-15 22:50:26