web-dev-qa-db-ja.com

Spring MVC:セッション属性を削除する方法は?

以下の_@SessionAttributes_の使用例。ウィザードの終了後にuserセッション属性をクリアする方法は?私の例では、_/wizard0_に戻った後、セッション属性はまだ存在しています。 status.setComplete()session.removeAttribute("user")を試しましたが、うまくいきません。

_@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 [〜#〜]

私の間違い。 status.setComplete();は正常に動作します。 session.removeAttribute("user")はここでは何もしません。

17
marioosh

WebRequest.removeAttributeメソッドの代わりにHttpSession.setAttributeメソッドを使用してみてください(例1)。または、まったく同じことを行う別の方法として、「SessionAttributeStore.cleanupAttribute」を使用できます(例2)。

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

例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
michal.kreuzman