Session 如何将操作参数绑定到SpringMVC3.x中会话作用域中存储的对象?

Session 如何将操作参数绑定到SpringMVC3.x中会话作用域中存储的对象?,session,spring-mvc,model-binding,Session,Spring Mvc,Model Binding,我想这样做: public ModelAndView someAction(SessionUser sessionUser, Model model) { model.addAttribute(sessionUser); return new ModelAndView("someview"); } 其中SessionUser对象的实例存储在会话中,并在请求执行期间绑定到SessionUser参数 我不熟悉Spring MVC,但在.NET MVC中,这可以通过创建Mode

我想这样做:

public ModelAndView someAction(SessionUser sessionUser, Model model) {

    model.addAttribute(sessionUser);

    return new ModelAndView("someview");

}
其中SessionUser对象的实例存储在会话中,并在请求执行期间绑定到SessionUser参数

我不熟悉Spring MVC,但在.NET MVC中,这可以通过创建ModelBinder来实现:

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;
    }
}
这将作为请求执行管道的一部分执行。如果在请求参数中找不到sessionUser,它会给这个自定义模型绑定器一个快照

SpringMVC3中是否有类似的机制可以让我完成同样的事情?我希望我的控制器及其方法不知道绑定对象是否来自表单字段、url参数、会话等


提前谢谢

是的,您可以声明性地将模型属性绑定到会话。为此,您需要使用
@SessionAttributes(“sessionUser”)
注释控制器

另请参见:


是的,您可以声明性地将模型属性绑定到会话。为此,您需要使用
@SessionAttributes(“sessionUser”)
注释控制器

另请参见:


感谢您的回复。。。在上面的代码中,我能够确定会话范围中是否存在sessionUser。如果它存在,我将返回它。如果没有,我将实例化一个新的。使用@SessionAttributes可以实现这一点吗?@Jason Stonebraker:您可以尝试创建一个
@ModelAttribute
-带注释的方法来创建一个新的
SessionUser
。据我所知,当会话中不存在
SessionUser
时将使用它。感谢您的回复。。。在上面的代码中,我能够确定会话范围中是否存在sessionUser。如果它存在,我将返回它。如果没有,我将实例化一个新的。使用@SessionAttributes可以实现这一点吗?@Jason Stonebraker:您可以尝试创建一个
@ModelAttribute
-带注释的方法来创建一个新的
SessionUser
。据我所知,它将在会话中不存在
SessionUser
时使用。