Spring @SessionAttributes注解 @ModelAttribute注解
一、@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")作为请求路径,也同时作为视图名,即跳转页面的名称
最新文章
- MYsql 数据库密码忘记(Linux)
- python学习之网页数据获取
- 新年SO交期更新——FP_SO2SAP
- jquery的基本事件大全
- 控制ASP.NET Web API 调用频率与限流
- telnet命令使用示例
- 推荐一个css帮助手册的版本 同时提供chm和在线
- TestNG:org.openqa.selenium.firefox.NotConnectedException: Unable to connect
- hadoop分布式部署(2014-3-8)
- MVC-Model数据注解(三)-Remote验证的一个注意事项
- Jdbc工具类(连接及释放)
- CF #404 (Div. 2) B. Anton and Classes (贪心)
- mysql数据库基于linux的安装步骤及数据库操作
- Servlet(7)—ServletConfig接口和SevletContext接口
- gitlab-ci + k8s 之k8s (二)
- 常见聚类算法——K均值、凝聚层次聚类和DBSCAN比较
- Individual Project - Word_frequency
- 【转】Linux中常见问题(磁盘 定时任务)
- suse系统开启ssh方法
- 安卓工作室 Android studio 或 Intellij IDEA 美化 修改 汉化 酷炫 装逼 Android studio or Intellij IDEA beautify modify Chinesization cool decoration
热门文章
- 【LeetCode】540. Single Element in a Sorted Array 解题报告(Python & C++)
- MySQL数据库报错 > 1366 - Incorrect string value: ‘\xE6\xB1\x9F\xE6\x96\x87‘ for column ‘Teacher‘ at row 1
- 使用JavaScript数组实现省份和城市的级联菜单
- 编写Java程序,定义士兵类(Soldiers)并初始化5个士兵对象。
- 通过Rancher Desktop在桌面上运行K8s
- 每天学一点——python基本数据类型
- vue3+TypeScript+vue-router使用
- CentOS 7 连接不到网络解决方法(设置静态ip)
- 2.OSI各层概述
- 使用.NET 6开发TodoList应用(23)——实现请求限流