2011-12-13 57 views
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參數,會話等。

在此先感謝!

回答

1

是的,你可以聲明式地將模型屬性綁定到會話。爲了做到這一點,你需要用@SessionAttributes("sessionUser")註釋你的控制器。

參見:

+0

感謝您的答覆...在上面的代碼中,我能夠確定是否sessionUser在會話範圍存在。如果它存在,我會返回它。如果沒有,我實例化一個新的。 是否有可能使用@SessionAttributes完成此操作? –

+0

@Jason Stonebraker:你可以嘗試創建一個'@ ModelAttribute'註釋的方法來創建一個新的'SessionUser'。據我瞭解,會話中不存在'SessionUser'時會使用它。 – axtavt

相關問題