关于@ModelAttribute跟@SessionAttributes的应用
2015-07-07 21:17
253 查看
顾名思义SessionAttributes就是保存session的,SessionAttributes使用方法很简单,@SessionAttributes允许指定多个属性。你可以通过字符串数组的方式指定多个属性,如@SessionAttributes({“attr1”,”attr2”})。此外,@SessionAttributes还可以通过属性类型指定要session化的ModelMap属性,如@SessionAttributes(types=User.class),当然也可以指定多个类,如
@SessionAttributes(types={User.class,Dept.class}),还可以联合使用属性名和属性类型指定:@SessionAttributes(types={User.class,Dept.class},value={“attr1”,”attr2”})。
以下例子使用:@SessionAttribute必须配合@ModelAttribute一起使用,
第一种方式,采用@SessionAttributes(“变量名”)
代码如下
在浏览器运行http://localhost:8080/SpringMVC/system/test得到如下图所示:
点击调用test1方法后,看后台如下:
通过注解@ModelAttribute可以获得之前保存的值。
第二种方式,采用@SessionAttributes(types={指定class})
采用这种方式的话系统会默认保存指定class的名字(头字母小写),如UserBean.class,modelmap会仅仅会保存名字为userBean或者userbean的对应的class,其余则不会保存,代码如下:
当在在页面上输入http://localhost:8080/SpringMVC/system/test时候,会把对应的内容保存到modelmap中,但后点击如下图,调用test1方法的时候,
得到如下图结果:
事实证明:调用sessionAttriubte只适用types参数的时候只是,默认保存以类名为名字的值,其中类名第一个字母为小写,而他只是能保存当前对象的值,而对象中存在了那个外一个对象的时候则不能保存
第三种:采用@SessionAttributes(value={指定名称},types={指定class})
使用这种方法则对指定的类,进行特定名称保存,一对一的形式进行保存,代码如下:
同样运行第二种方式的地址,得到的结果如下图:
采用这种方式只是把要保存的类定义到固定的名字而已,用法与第二种一样
@SessionAttributes(types={User.class,Dept.class}),还可以联合使用属性名和属性类型指定:@SessionAttributes(types={User.class,Dept.class},value={“attr1”,”attr2”})。
以下例子使用:@SessionAttribute必须配合@ModelAttribute一起使用,
第一种方式,采用@SessionAttributes(“变量名”)
代码如下
1:@Controller
2:@SessionAttributes("user")
3:publicclasstestSessionAttribute{
4:
5:privateLoggerlogger=LoggerFactory.getLogger(testSessionAttribute.class);
6:
7:@RequestMapping("test")
8:publicStringtest(ModelMapmap){
9:UserBeanuserBean=newUserBean();
10:userBean.setId(1);
11:userBean.setUsername("EdwardLau");
12:userBean.setPassword("HelloWorld!");
13:map.put("user",userBean);
14:return"sessionattribute";
15:}
16:
17:
18:@RequestMapping("test1")
19:publicStringtest(@ModelAttribute("user")UserBeanuserBean){
20:logger.debug("test1方法调用----------");
21:logger.debug(userBean.getId()+":"+userBean.getPassword()+":"+userBean.getUsername());
22:logger.debug("test1方法调用结束----------");
23:return"users";
24:}
25:
26:}
在浏览器运行
点击调用test1方法后,看后台如下:
通过注解@ModelAttribute可以获得之前保存的值。
第二种方式,采用@SessionAttributes(types={指定class})
采用这种方式的话系统会默认保存指定class的名字(头字母小写),如UserBean.class,modelmap会仅仅会保存名字为userBean或者userbean的对应的class,其余则不会保存,代码如下:
当在在页面上输入
得到如下图结果:
事实证明:调用sessionAttriubte只适用types参数的时候只是,默认保存以类名为名字的值,其中类名第一个字母为小写,而他只是能保存当前对象的值,而对象中存在了那个外一个对象的时候则不能保存
第三种:采用@SessionAttributes(value={指定名称},types={指定class})
使用这种方法则对指定的类,进行特定名称保存,一对一的形式进行保存,代码如下:
1:@Controller
2:@SessionAttributes(value={"test","dept"},types={UserBean.class,DeptBean.class})
3:publicclasstestSessionAttribute{
4:
5:privateLoggerlogger=LoggerFactory.getLogger(testSessionAttribute.class);
6:
7:@RequestMapping("test")
8:publicStringtest(ModelMapmap){
9:UserBeanuserBean=newUserBean();
10:userBean.setId(1);
11:userBean.setUsername("EdwardLau");
12:userBean.setPassword("HelloWorld!");
13:map.put("aaa","aaa");
14:map.put("test",userBean);
15:UserBeanuserBean1=newUserBean();
16:userBean.setId(2);
17:userBean.setUsername("EdwardLau1");
18:userBean.setPassword("HelloWorld1!");
19:map.put("user",userBean1);
20:DeptBeandeptBean=newDeptBean();
21:deptBean.setDeptId(120);
22:deptBean.setDeptname("综合管理");
23:deptBean.setUserBean(userBean1);
24:map.put("dept",deptBean);
25:return"sessionattribute";
26:}
27:
28:
29:@RequestMapping("test1")
30:publicStringtest(@ModelAttribute("test")UserBeanuserBean,@ModelAttribute("aaa")Stringaaa
31:,@ModelAttribute("user")UserBeanbean,@ModelAttribute("dept")DeptBeandeptBean){
32:logger.debug("test1方法调用----------");
33:logger.debug(userBean.getId()+":"+userBean.getPassword()+":"+userBean.getUsername());
34:logger.debug("aaaa:"+aaa+"bean:"+bean.getId()+":"+bean.getUsername()+":"+bean.getPassword());
35:logger.debug("deptBean:"+deptBean.getDeptId()+":"+deptBean.getUserBean().getUsername()+":"+deptBean.getDeptname());
36:logger.debug("test1方法调用结束----------");
37:return"testsession";
38:}
39:
40:}
同样运行第二种方式的地址,得到的结果如下图:
采用这种方式只是把要保存的类定义到固定的名字而已,用法与第二种一样
相关文章推荐
- OpenGL: 视图矩阵的推导
- Fedora 22 学习(1)
- Android--Listview优化
- 上下抖动的进度条
- eNSP 路由器交换机配置时总弹一些数据
- 《opencv入门教程》
- 苹果开发 笔记(45)UILabel
- Python—HTTP处理Gzip压缩数据
- 软件开发人员的素质
- 不用除法和取余做十进制到二进制十六进制的转换
- js数学 atan2 cos sin
- 2015.7.7 第二课 课程重点( html:表单)
- OJ嘻唰唰之类模板(2)求类中数据成员的最大值-类模板
- gluLookAt矩阵推导
- 2015.7.6 第一课 课程重点(html:认识html、列表、表格、相对路径、超链接)
- 动态设置mfc对话框的标题
- 【js】 流式布局 页面
- 第一天,对MAC OS的初步认识
- hdu(1542)——Atlantis(线段树求面积并)
- ftplib源码剖析