1
我願做這樣的事情:如何將動作參數綁定到存儲在Spring MVC 3.x的會話作用域中的對象?
public ModelAndView someAction(SessionUser sessionUser, Model model) {
model.addAttribute(sessionUser);
return new ModelAndView("someview");
}
凡SessionUser對象的實例存儲在會話和請求的執行過程中被綁定到sessionUser參數。
我是新來的Spring MVC,但在.NET MVC這可以通過創建一個模型綁定器這樣來完成:
public class SessionUserModelBinder : IModelBinder
{
private const string sessionUserSessionKey = "_sessionUser";
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
// Return the sessionUser from Session[] (creating it first if necessary)
SessionUser sessionUser = (SessionUser)controllerContext.HttpContext.Session[sessionUserSessionKey];
if (sessionUser == null)
{
sessionUser = new SessionUser();
controllerContext.HttpContext.Session[sessionUserSessionKey] = sessionUser;
}
return sessionUser;
}
}
這將作爲請求執行流水線的一部分來執行。如果在Request參數中找不到sessionUser,它會給這個自定義模型綁定器一個鏡頭。
在Spring MVC 3中是否有類似的機制可以讓我完成同樣的事情?我寧願我的控制器和它的方法不知道綁定的對象是來自表單域,url參數,會話等。
在此先感謝!
感謝您的答覆...在上面的代碼中,我能夠確定是否sessionUser在會話範圍存在。如果它存在,我會返回它。如果沒有,我實例化一個新的。 是否有可能使用@SessionAttributes完成此操作? –
@Jason Stonebraker:你可以嘗試創建一個'@ ModelAttribute'註釋的方法來創建一個新的'SessionUser'。據我瞭解,會話中不存在'SessionUser'時會使用它。 – axtavt