spring mvc中,变量有一个作用域的概念,你可以很方便使用注解,就能实现变量的的设置,在各自的作用域内优雅的使用该变量。
ModelAttribute
假如有这样一段代码:
myRequestObject这个引用,经过spring的处理,会自动把addStuffToRequestScope这个方法的返回值MyCommandBean作为值保存下来。实际上spring的model缓存这个值,其实这个值是在request的getAttribute里面。当你调用controller里面某个@requestmapping注解的方法,都能取到这个model里面的值。
这个图能说明一些问题:
可以看出,在controller渲染页面之前,spring已经把ModelAttribute里面的值植入进去了。其实它的作用域就是当前请求。
SessionAttributes
在原来的代码基础之上,再添加一个注解,就表示这个变量会跟随用户的会话周期。只要用户不退出或者SESSION过期,这个值就一直可以保留。当然,在当前的 request周期之内,调用getAttribute方法同样也可以得到。
注意session与model的value名称要一样。
使用场景:
modelattribute:常量定义,比如key,value的映射。像下拉框,多选框等等
sessionattribute:跟用户会话相关的常量,如用户基本信息等
参考链接:understanding-spring-mvc-model-and-session-attributes
我的微信公众号,欢迎沟通学习。
posted on 2016-03-10 20:02
alexcai 阅读(2959)
评论(1) 编辑 收藏