一、@SessionAttribute详解

如果多个请求之间需要共享数据,就可以使用@SessionAttribute。

配置的方法:

在控制器类上标注@SessionAttribute。

配置需要共享的数据范围。

这样,就可以将model中的属性同步到session中了。

注意:

默认情况,SpringMVC会将model的数据存放在request域中。

此时,当一个请求结束之后,数据将会失效

因此,当数据需要跨页面使用时,就需要将数据存放到session中。

@SessionAttributes就是将指定的model中的数据拷贝到session中。

使用方法:

@SessionAttribute中,

value指定需要放入会话的属性名称

type指定需要放入会话的属性类型

@SessionAttributes(types=User.class)会将model中所有类型为 User的属性添加到会话中。

@SessionAttributes(value={“user1”, “user2”}) 会将model中属性名为user1和user2的属性添加到会话中。

@SessionAttributes(types={User.class, Dept.class}) 会将model中所有类型为 User和Dept的属性添加到会话中。

@SessionAttributes(value={“user1”,“user2”},types={Dept.class})会将model中属性名为user1和user2以及类型为Dept的属性添加到会话中。

@SessionAttributes(value={"user"})
@Controller
public class UserController { @RequestMapping("/testSessionAttributes")
public String testSessionAttributes(Model model){
User user = new User("jack","123456");
model.addAttribute("user", user);
return "success";
}
} 

 

在前端取值: 

${requestScope.user}

${sessionScope.user}

二、@ModelAttribute详解

主要的作用:

将数据添加到model对象中,用于视图页面展示的时候使用。

@ModelAttribute注解的方法,在controller中每个处理方法被调用之前,都会按照先后顺序被执行一次。

因此,当一个controller映射多个URL,使用该注解需要谨慎。

注解使用情形:

(1)  @ModelAttribute 注释没有返回值的方法:
@Controller
@RequestMapping(value="/")
public class TestModelAttributeController { @RequestMapping(value="/result")
public String login(Model model) {
//如果测试成功,控制台输出true
System.out.println(model.containsAttribute("username"));
System.out.println(model.containsAttribute("pwd"));
return "result";
}
@ModelAttribute
public void user(
@RequestParam("username") String username,
@RequestParam("pwd") String pwd,Model model) {
model.addAttribute("username", username);
model.addAttribute("pwd", pwd);
}
}  

在@RequestMapping注解的方法被调用时,在这个方法之前,@ModelAttribute方法将会先被执行。

model.addAttribue("key",value)绑定键值。

上面这种情况,当URL或者post没有传递参数时,会报错。

(2) @ModelAttribute 注释返回具体类的方法
@ModelAttribute
public User userModel(@RequestParam("username") String username,@RequestParam("pwd") String pwd){
User user = new User(username,pwd);
return user;
}

这里,model属性的名称没有指定。

由返回类型隐含表示。

属性名称是user。

(3)@ModelAttribute(value="")注释返回具体类的方法
@Controller
@RequestMapping(value="/")
public class TestModelAttributeController{ @RequestMapping(value="result")
public String login(Model model) {
model.containsAttribute("username");
return "result";
}
/*
* 返回的是username的值
*相当于model.addAttribute("username", username);
*/
@ModelAttribute(value="username")
public String userModel(@RequestParam("username") String username) {
return username;
}
}

  

(4)@ModelAttribute和@RequestMapping同时注释一个方法
@Controller
@RequestMapping(value="/")
public class TestModelAttributeController{ @ModelAttribute("username")
@RequestMapping(value="/result")
public String login(@RequestParam("username") String username,Model model) { System.out.println(model.containsAttribute("username"));
return username;
}
}

@ModelAttribute(“xxx”)的属性值作为model的attributeName,login方法返回值作为attributeName的属性值;

RequestMapping("/yyy")作为请求路径,也同时作为视图名,即跳转页面的名称

Spring @SessionAttributes注解 @ModelAttribute注解的更多相关文章

  1. Spring MVC 中 @ModelAttribute 注解的妙用

    Spring MVC 中 @ModelAttribute 注解的妙用 Spring MVC 提供的这种基于注释的编程模型,极大的简化了 web 应用的开发.其中 @Controller 和 @Rest ...

  2. spring mvc之@ModelAttribute注解

    1.@ModelAttribute注释void返回值的方法 @Controller public class HelloModelController { @ModelAttribute public ...

  3. @ModelAttribute 注解及 POJO入参过程

    一.modelattribute注解 @ModelAttribute注解的方法有两种,一种无返回值,一种有返回值,方法的可以用@RequestParam注解来获取请求的参数,如果不获取参数,可以不用此 ...

  4. Spring MVC常用注解@PathVariable、@RequestHeader、@CookieValue、@RequestParam、@RequestBody、@SessionAttributes、@ModelAttribute

    简介: handler method参数绑定常用的注解,我们根据他们处理的Request的不同内容部分分为四类:(主要讲解常用类型) A.处理requet uri部分(这里指uri template中 ...

  5. Spring MVC SessionAttributes ModelAttribute注解

    说明 本文主要针对 @SessionAttributes注解 和 @ModelAttribute注解的基础用法进行解析.至于为什么会将这两个注解放在一起,是因为它们之间还是有点影响的. @Sessio ...

  6. 全面解析Spring中@ModelAttribute注解的用法

    本文不再更新,可能存在内容过时的情况,实时更新请移步我的新博客:全面解析Spring中@ModelAttribute注解的用法: @ModelAttribute注解用于将方法的参数或方法的返回值绑定到 ...

  7. spring mvc:注解@ModelAttribute妙用

    在Spring mvc中,注解@ModelAttribute是一个非常常用的注解,其功能主要在两方面: 运用在参数上,会将客户端传递过来的参数按名称注入到指定对象中,并且会将这个对象自动加入Model ...

  8. Spring Boot 2.0 教程 | @ModelAttribute 注解

    欢迎关注微信公众号: 小哈学Java 文章首发于个人网站: https://www.exception.site/springboot/spring-boot-model-attribute Spri ...

  9. Spring MVC @ModelAttribute注解

    在一个Controller内,被@ModelAttribute标注的方法会在此controller的每个handler方法执行前被执行. 被@ModelAttribute标注的方法的参数绑定规则和普通 ...

随机推荐

  1. 【LeetCode】303. Range Sum Query - Immutable 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 解题方法 保存累积和 日期 题目地址:https://leetcode. ...

  2. 圆桌问题(hdu4841)

    圆桌问题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submi ...

  3. 2021 年终总结:内推40人、全网15万粉、Code Runner 3000万下载、发扬WLB、进军视频领域

    时光飞逝,岁月如梭,蓦然回首,已是年底. 感觉写 2020 年终总结还是在不久之前.转眼间,2021 已经接近尾声了.是时候来写写 2021 年的年终总结了. 内推 40 人 2019 年,内推了 2 ...

  4. vue create 初步解析以及定制化修改

    版本说明 $ vue --version @vue/cli 4.5.9 $ node --version v14.0.0 $ npm --version 7.6.1 源码位置-mac /usr/loc ...

  5. PostgreSQL相关知识概念

    本文主要介绍PostgreSQL数据库的一些重要知识点, 包括数据库.模式.表空间.用户/角色等概念和关系, 帮助用户理解PostgreSQL数据库的重要概念, 从而能够更好的使用PostgreSQL ...

  6. cpu负载

    查看cpu负载,我们经常会使用top,或者是uptime命令 但是这只能看到cpu的总体的负载情况.如果我们想看cpu每个核心的负载情况是看不到的. 所以我们可以用mpstat命令 服务器一共32核心 ...

  7. 字符串的展开expand

    A. 字符串的展开(expand.cpp) 内存限制:64 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 在初赛普及组的"阅读程序写结果&qu ...

  8. 《selenium2 python自动化测试》(高清).PDF,免费无需任何解压密码

    链接:https://pan.baidu.com/s/1eAI0mXvJeblBn2Tn9WClEA 提取码:7m5u

  9. python连接真机或模拟器

    前言: 最近写自动化代码的时候,使用模拟器运行 python + appium代码时,APP闪退了,只能使用真机运行代码了.真机要怎么配置设备的信息呢? 怎么配置设备的信息? 配置是使用真机还是模拟器 ...

  10. DRF框架在嵌套关系下实现嵌套对象字段的过滤

    当需要对关联对象的字段进行选择性显示时,在所对应的serializer类中声明引用的字段. 例如: class TrackSerializer(serializers.ModelSerializer) ...