SpringMVC模型数据

SpringMVC 模型数据

引入:开发中, 控制器/处理器中获取的数据如何放入 request / session域,然后在前端(VUE/JSP/…)取出显示

前期代码准备

  1. 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 +
                    '}';
        }
    }
    
  2. 填写数据的页面

    <%--
      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>
    
  3. 数据展示页面

    <%--
      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 域

  1. 方式一:通过 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";
    }
    
  2. 方式二:通过请求的方法参数 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";
        }
    
  3. 通过返回 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";
}

注意事项

  1. 从本质看,请求响应的方法 return “xx”, 是返回了一个字符串,其实本质是返回了一个
    ModelAndView 对象,只是默认被封装起来的.
  2. ModelAndView 即可以包含 model 数据,也可以包含视图信息
  3. ModelAndView 对象的 addObject 方法可以添加 key-val 数据,默认在 request 域中
  4. ModelAndView 对象 setView 方法可以指定视图名称
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值