一、@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")作为请求路径,也同时作为视图名,即跳转页面的名称

最新文章

  1. MYsql 数据库密码忘记(Linux)
  2. python学习之网页数据获取
  3. 新年SO交期更新——FP_SO2SAP
  4. jquery的基本事件大全
  5. 控制ASP.NET Web API 调用频率与限流
  6. telnet命令使用示例
  7. 推荐一个css帮助手册的版本 同时提供chm和在线
  8. TestNG:org.openqa.selenium.firefox.NotConnectedException: Unable to connect
  9. hadoop分布式部署(2014-3-8)
  10. MVC-Model数据注解(三)-Remote验证的一个注意事项
  11. Jdbc工具类(连接及释放)
  12. CF #404 (Div. 2) B. Anton and Classes (贪心)
  13. mysql数据库基于linux的安装步骤及数据库操作
  14. Servlet(7)—ServletConfig接口和SevletContext接口
  15. gitlab-ci + k8s 之k8s (二)
  16. 常见聚类算法——K均值、凝聚层次聚类和DBSCAN比较
  17. Individual Project - Word_frequency
  18. 【转】Linux中常见问题(磁盘 定时任务)
  19. suse系统开启ssh方法
  20. 安卓工作室 Android studio 或 Intellij IDEA 美化 修改 汉化 酷炫 装逼 Android studio or Intellij IDEA beautify modify Chinesization cool decoration

热门文章

  1. 【LeetCode】540. Single Element in a Sorted Array 解题报告(Python & C++)
  2. MySQL数据库报错 > 1366 - Incorrect string value: ‘\xE6\xB1\x9F\xE6\x96\x87‘ for column ‘Teacher‘ at row 1
  3. 使用JavaScript数组实现省份和城市的级联菜单
  4. 编写Java程序,定义士兵类(Soldiers)并初始化5个士兵对象。
  5. 通过Rancher Desktop在桌面上运行K8s
  6. 每天学一点——python基本数据类型
  7. vue3+TypeScript+vue-router使用
  8. CentOS 7 连接不到网络解决方法(设置静态ip)
  9. 2.OSI各层概述
  10. 使用.NET 6开发TodoList应用(23)——实现请求限流