您的位置:首页 > 其它

关于@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(“变量名”)

代码如下

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:}


在浏览器运行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})

使用这种方法则对指定的类,进行特定名称保存,一对一的形式进行保存,代码如下:

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:}


同样运行第二种方式的地址,得到的结果如下图:





采用这种方式只是把要保存的类定义到固定的名字而已,用法与第二种一样
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: