关于@ModelAttribute跟@SessionAttributes的应用

转载 2015年07月07日 21:17:05

顾名思义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:  public class testSessionAttribute {
   4:      
   5:      private Logger logger = LoggerFactory.getLogger(testSessionAttribute.class);
   6:      
   7:      @RequestMapping("test")
   8:      public String test(ModelMap map){
   9:          UserBean userBean = new UserBean();
  10:          userBean.setId(1);
  11:          userBean.setUsername("EdwardLau");
  12:          userBean.setPassword("Hello World !");
  13:          map.put("user", userBean);
  14:          return "sessionattribute";
  15:      }
  16:      
  17:      
  18:      @RequestMapping("test1")
  19:      public String test(@ModelAttribute("user") UserBean userBean){
  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得到如下图所示:

1932AF91-C93B-42B5-815B-A640ACE8A3FF

点击调用test1方法后,看后台如下:

28E6571D-3885-4630-9586-C350E3EF1952

通过注解@ModelAttribute可以获得之前保存的值。

第二种方式,采用@SessionAttributes(types={指定class})

采用这种方式的话系统会默认保存指定class的名字(头字母小写),如UserBean.class,modelmap会仅仅会保存名字为userBean或者userbean的对应的class,其余则不会保存,代码如下:

 

当在在页面上输入http://localhost:8080/SpringMVC/system/test时候,会把对应的内容保存到modelmap中,但后点击如下图,调用test1方法的时候,

83310F95-B4B4-4E65-BE84-B7A02B0A460D

得到如下图结果:

EF751DD4-D64F-4D68-BA8E-4C0DEE975BD8

事实证明:调用sessionAttriubte只适用types参数的时候只是,默认保存以类名为名字的值,其中类名第一个字母为小写,而他只是能保存当前对象的值,而对象中存在了那个外一个对象的时候则不能保存

第三种:采用@SessionAttributes(value={指定名称},types={指定class})

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

   1:  @Controller
   2:  @SessionAttributes(value={"test","dept"}, types={UserBean.class,DeptBean.class})
   3:  public class testSessionAttribute {
   4:      
   5:      private Logger logger = LoggerFactory.getLogger(testSessionAttribute.class);
   6:      
   7:      @RequestMapping("test")
   8:      public String test(ModelMap map){
   9:          UserBean userBean = new UserBean();
  10:          userBean.setId(1);
  11:          userBean.setUsername("EdwardLau");
  12:          userBean.setPassword("Hello World !");
  13:          map.put("aaa", "aaa");
  14:          map.put("test", userBean);
  15:          UserBean userBean1 = new UserBean();
  16:          userBean.setId(2);
  17:          userBean.setUsername("EdwardLau1");
  18:          userBean.setPassword("Hello World1 !");
  19:          map.put("user", userBean1);
  20:          DeptBean deptBean = new DeptBean();
  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:      public String test(@ModelAttribute("test") UserBean userBean, @ModelAttribute("aaa") String aaa
  31:              ,@ModelAttribute("user")  UserBean bean,@ModelAttribute("dept") DeptBean deptBean){
  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:  }

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

AB1910F4-92A3-4C21-A937-3E09D0557036

采用这种方式只是把要保存的类定义到固定的名字而已,用法与第二种一样

springmvc学习笔记(11)——SessionAttributes

SessionAttributes这次来学习一个新的注解SessionAttributes 这个注解可以把数据放到Session中,很简单,看代码: public class Student { ...
  • u010837612
  • u010837612
  • 2015年04月23日 10:26
  • 1254

详解@SessionAttributes

A、@SessionAttributes org.springframework.web.bind.annotation.SessionAttributes public @interfa...
  • zhengbo0
  • zhengbo0
  • 2014年08月13日 18:04
  • 2990

@ModelAttribute和@SessionAttributes的用法

1.@SessionAttribute是Controller类级别的注解,作用是为了将指定名称或类型的隐含模型中的对象放置到Session作用域中,实现多次请求共享参数,在每次请求的时候,使用@Ses...
  • yu870646595
  • yu870646595
  • 2016年04月18日 10:49
  • 1382

SpringMVC中@ModelAttribute和@SessionAttributes注解的使用

1.@ModelAttribute注解的使用 @ModelAttribute注解在两种地方可以使用 从这里我们可以看到该注解可以用在参数上也可以用在方法体上。 现在我们就来讲解这两种方式...
  • z69183787
  • z69183787
  • 2016年12月16日 17:36
  • 1966

Spring MVC中常用注解之@SessionAttributes @ModelAttribute详解

绑定模型对象中某个属性 Spring 2.0 定义了一个 org.springframework.ui.ModelMap 类,它作为通用的模型数据承载对象,传递数据供视图所用。我们可以在请求处理方法中...
  • linzhiqiang0316
  • linzhiqiang0316
  • 2016年08月25日 22:21
  • 5192

Spring采用velicity视图时,使用@SessionAttributes("")注解出现Cannot expose session attribute 'user' because of an

Spring采用velicity视图时,使用@SessionAttributes("")注解出现Cannot expose session attribute 'user' because of an...
  • ytp151730
  • ytp151730
  • 2014年01月07日 14:45
  • 1300

关于@SessionAttributes和@ModelAttribute最好的文章了

看了一下,@SessionAttributes和@ModelAttribute就是为了方便使用session.get/setAttribute和request.get/setAttribute而使用的...
  • hotdust
  • hotdust
  • 2016年04月21日 23:35
  • 878

[springMVC]Spring3MVC 在JSP中使用@ModelAttribute

原文地址: http://liukai.iteye.com/blog/973717 在教程中,我们将创建一个简单的Spring3MVC simple CRUD应用程序.  什...
  • wendellup
  • wendellup
  • 2012年12月23日 15:52
  • 8290

spring-mvc @ModelAttribute 绑定表单数据到VO

场景:任何提交表单的时候 目的:
  • qq_15407943
  • qq_15407943
  • 2014年11月20日 21:26
  • 1239

关于@ModelAttribute跟@SessionAttributes的应用

顾名思义SessionAttributes就是保存session的,SessionAttributes使用方法很简单,@SessionAttributes 允许指定多个属性。你可以通过字符串数组的方式...
  • xwnxwn
  • xwnxwn
  • 2015年07月07日 21:17
  • 1398
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于@ModelAttribute跟@SessionAttributes的应用
举报原因:
原因补充:

(最多只允许输入30个字)