SpringMVC 模型数据
引入:开发中, 控制器/处理器中获取的数据如何放入 request / session域,然后在前端(VUE/JSP/…)取出显示
前期代码准备
-
entity
public class Master { private String name; private String address; private Pet pet; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public Pet getPet() { return pet; } public void setPet(Pet pet) { this.pet = pet; } public Master() { } public Master(String name, String address, Pet pet) { this.name = name; this.address = address; this.pet = pet; } @Override public String toString() { return "Master{" + "name='" + name + '\'' + ", address='" + address + '\'' + ", pet=" + pet + '}'; } }
-
填写数据的页面
<%-- Created by IntelliJ IDEA. User: PigBrother Date: 2022/11/8 Time: 22:47 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>测试模型数据</title> </head> <body> <h1>添加主人信息</h1> <!-- 老韩解读 1. 这里的字段名称和对象的属性名保持一致,级联添加属性也是一样保持名字对应关系 2. 如果只是添加主人信息,则去掉宠物号和宠物名输入框即可,pet 为null--> <form action="vote/vote08" method="post"> 主人地址:<input type="text" name="address"><br> 主人名:<input type="text" name="name"><br> 宠物号:<input type="text" name="pet.id"><br> 宠物名:<input type="text" name="pet.name"><br> <input type="submit" value="添加主人和宠物"> </form> <form action="vote/fillString" method="post"> color:<input type="text" name="color"><br> <input type="submit" value="提交"> </form> <br/><hr/> <h1>添加主人信息[测试session]</h1> <form action="vote/vote08" method="post"> 主人号:<input type="text" name="id"><br> 主人名:<input type="text" name="name"><br> 宠物号:<input type="text" name="pet.id"><br> 宠物名:<input type="text" name="pet.name"><br> <input type="submit" value="添加主人和宠物"> </form> </body> </html>
-
数据展示页面
<%-- Created by IntelliJ IDEA. User: PigBrother Date: 2022/11/8 Time: 16:49 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>vote_ok </title> </head> <body> <h1>获取的的数据显示页面</h1> <hr> 取出request 域的数据 <br> hobby: ${hobby }<br> address: ${address }<br> 主人名字= ${requestScope.master.name } 主人名字= ${requestScope.master.address } 主人信息= ${requestScope.master } 宠物名字= ${requestScope.master.pet.name } fillParam = ${requestScope.color} <hr> 取出session 域的数据<br> 主人名字= ${sessionScope.master2.name } 主人信息= ${sessionScope.master2 } </body> </html>
放入request 域
-
方式一:通过 HttpServletRequest 放入 request 域
@RequestMapping(value = "/vote05") public String test05(Master master, HttpServletRequest request, HttpServletResponse response) { request.setAttribute("hobby", "lanqiu"); request.setAttribute("address", "CHINA"); System.out.println(master); return "vote_ok"; }
-
方式二:通过请求的方法参数 Map<String,Object> 放入 request 域
@RequestMapping(value = "/vote06") public String test06(Map<String, Object> map, Master master) { System.out.println("=====test06()=====~"); //老韩解读 //1. springMVC 会将map 的k-v 放入到request 域对象 // map.put("master", master); map.put("address", "beijing"); //返回到一个结果 return "vote_ok"; }
-
通过返回 ModelAndView 对象 实现 request 域数据
//通过返回ModelAndView 对象实现request 域数据 @RequestMapping(value = "/vote07") public ModelAndView test07(Master master) { System.out.println("=====test07()=====~"); //创建一个ModelAndView 对象 ModelAndView modelAndView = new ModelAndView(); //下面这句话就等价于将master 对象放入到request 域中,属性名“master” modelAndView.addObject("master", master); modelAndView.addObject("address", "shanghai"); modelAndView.setViewName("vote_ok"); //返回到一个结果 return modelAndView; }
将数据放入session 域中
@RequestMapping(value = "/vote08")
public String test08(Map<String, Object> map, Master master,
HttpSession session) {
System.out.println("======test08()======");
map.put("address", "guangzhou");
//在session 域也放入master 对象
session.setAttribute("master2", master);
return "vote_ok";
}
注意事项
- 从本质看,请求响应的方法 return “xx”, 是返回了一个字符串,其实本质是返回了一个
ModelAndView 对象,只是默认被封装起来的. - ModelAndView 即可以包含 model 数据,也可以包含视图信息
- ModelAndView 对象的 addObject 方法可以添加 key-val 数据,默认在 request 域中
- ModelAndView 对象 setView 方法可以指定视图名称