`
a137268431
  • 浏览: 157803 次
文章分类
社区版块
存档分类
最新评论

@ModelAttribute跟@SessionAttributes

 
阅读更多

原本打算将@ModelAttribute跟@SessionAttributes一起写的发现有些例子不可以重复使用,所以决定再开一篇文章写

顾名思义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

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

分享到:
评论

相关推荐

    [Spring MVC] - ModelAttribute使用.docx

    例如,可以结合`@SessionAttributes`注解来实现会话级别的模型数据共享。这在处理多步表单或者需要跨多个请求维护状态的情况下非常有用。 最后,像在`BaseController`中所示,`@ModelAttribute`还可以用于设置`...

    SpringMVC基础—— ModelAttribute和 SessionAttribute.docx

    虽然`@ModelAttribute`主要处理请求级的数据,但Spring MVC还提供了`@SessionAttributes`注解,用于将某些模型对象保存在session中,跨多个请求保持状态。`@SessionAttributes`通常用于处理那些在多个请求之间需要...

    spring学习之@SessionAttributes实例解析

    通过这种方式,`@SessionAttributes`和`@ModelAttribute`协同工作,使得我们能够方便地在多个请求间共享和恢复数据,而无需手动处理Session管理。这对于提高代码的可读性和减少重复代码是很有帮助的。 总的来说,`@...

    SpringMVC处理模型数据-2.docx

    此外,`@ModelAttribute`还支持预填充对象的方法,即可以在控制器方法中定义一个带有`@ModelAttribute`的方法来预先设置对象的某些属性。 **示例代码:** ```java @RequestMapping("/form") public String form...

    SpringMVC-4 处理模型数据

    通过ModelAndView、Map与Model、@SessionAttributes和@ModelAttribute注解来处理模型数据;其中,@ModelAttribute是重点,说明其运行流程并进行代码分析,最终给出SpringMVC目标方法的POJO类型参数的入参全过程,并...

    SpringMVC SessionAttribute 使用说明.docx

    它通常与`@ModelAttribute`配合使用,`@ModelAttribute`注解用于将方法的返回值或参数绑定到模型(Model)中,以便在视图解析时可用。 ### `@ModelAttribute` 的作用 `@ModelAttribute` 有以下两个主要用途: 1. **...

    springMVC接收参数的几种注解.pdf

    5. **@SessionAttributes 和 @ModelAttribute** `@SessionAttributes` 注解用于声明需要在 HTTP 会话中存储的属性,而 `@ModelAttribute` 通常用于从请求参数或会话中创建或更新模型对象。例如: ```java @...

    SpringMVC杂记(三) 向导型Controller的实现(基于SpringMVC 3.1.1)

    SpringMVC 3.1.1版本的源码中,Controller接口和相关注解(如@RequestMapping、@SessionAttributes、@ModelAttribute)的实现提供了上述功能的基础。通过阅读源码,我们可以更深入地理解这些特性的内部工作原理。 ...

    SpringMVC 常用注解类视频详解

    15. `@ModelAttribute("attrName")`:配合`@SessionAttributes`使用,可以从HttpSession中获取或向其中添加属性。 通过深入理解并熟练运用这些注解,开发者可以有效地构建和维护Spring MVC应用程序,提高开发效率和...

    一个注解解决页面重复提交

    在Java Web开发中,Spring框架提供了`@SessionAttributes`和`@ModelAttribute`注解,可以结合自定义拦截器实现防重复提交。 1. **@SessionAttributes**:这个注解用于将模型属性存储在Session中。当我们处理表单...

    详解SpringMVC如何进行数据回显

    在这个过程中,SpringMVC提供了多种机制来实现数据回显,包括模型数据导向视图、@ModelAttribute、Map Model和SessionAttributes等。 模型数据导向视图 在SpringMVC中,模型数据是指控制器传递给视图的数据。模型...

    SSM笔记-处理模型数据

    本文主要围绕"SSM笔记-处理模型数据"这一主题,深入探讨ModelAndView、ModelAttribute以及SessionAttributes在SpringMVC中的应用。 首先,我们来理解ModelAndView。在SpringMVC中,Controller处理完业务逻辑后,...

    springMVC接收参数的几种注解.docx

    - `@ModelAttribute` 通常与表单绑定和模型属性结合使用,它可以从请求参数中获取数据并创建一个对象实例,或者将对象添加到模型中。例如: ```java @PostMapping("/submitForm") public String submitForm(@...

    spring3.0MVC注解(附实例).docx

    - `@ModelAttribute` 用于将请求参数绑定到一个对象,常用于表单数据的处理。此外,它还可以用于方法参数的预处理,如校验或填充默认值。 8. **@SessionAttributes** - `@SessionAttributes` 注解用于在HTTP会话...

    java或Java框架中常用的注解及其作用详解_资料.docx

    - `@ModelAttribute`和`@SessionAttributes`:在Spring MVC中,`@ModelAttribute`用于将请求参数绑定到模型对象,`@SessionAttributes`则用于在HTTP会话中存储模型对象。 - `@PathVariable`:从URL路径中提取参数...

    Spring MVC常用注解

    public String createUser(@ModelAttribute User user) { // ... return "redirect:/users"; } ``` 7. `@ResponseBody`:标记在方法上表示返回值将直接写入 HTTP 响应体,而不是试图寻找一个对应的视图进行渲染。...

    Spring MVC 3.0实战指南.ppt

    访问数据模型:@ModelAttribute 访问数据模型:Map及Model 访问数据模型:@SessionAttributes 一场由@SessionAttributes引发的血案... 如何避免@SessionAttributes引发的血案 目录 Spring MVC如何解析视图 视图解析...

    Spring3MVC注解教程.ppt

    访问数据模型:@ModelAttribute 访问数据模型:Map及Model 访问数据模型:@SessionAttributes 一场由@SessionAttributes引发的血案... 如何避免@SessionAttributes引发的血案 目录 Spring MVC如何解析视图 ...

    SpringMVC学习课堂笔记

    - `@SessionAttributes`:用于指定要存储在会话中的模型属性名称。 - `@ModelAttribute("model")`:用于将方法的返回值添加到模型中。 ##### 4.2 参数绑定 - **简单类型绑定**:自动绑定基本类型(如String、int等...

    springMVC部分注解

    #### 四、`@ModelAttribute` 和 `@SessionAttributes` 1. **`@ModelAttribute`**:用于将方法的返回值添加到模型中,也可以用于方法参数,将请求参数自动转换为方法参数类型。当作用于方法时,该方法会在实际请求...

Global site tag (gtag.js) - Google Analytics