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