以下の_@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";
}
}
_
私の間違い。 status.setComplete();
は正常に動作します。 session.removeAttribute("user")
はここでは何もしません。
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";
}