SpringMVC之数据处理与数据回显

处理地址栏传输的数据

这里以浏览器get方式请求为例

  1. 地址栏提交的域名称和处理方法的参数一致时
@Controller
public class RestFulController {
    
    
    //映射访问路径,必须是POST请求
    @GetMapping("/add")
    public String test(String name) {
    
    
        System.out.println(name);
        //返回视图位置
        return "hello";
    }
}

在这里插入图片描述
在这里插入图片描述
如果地址栏提交的域名称和处理方法的参数不一致时,接收的参数结果为null

  1. 地址栏提交的域名称和处理方法的参数不一致时,使用**@RequestParam(“值”),填入地址栏中的域名称**
@Controller
public class RestFulController {
    
    
    //映射访问路径,必须是POST请求
    @GetMapping("/add")
//@RequestParam("username") : username提交的域的名称 
    public String test(@RequestParam("username") String name) {
    
    
        System.out.println(name);
        //返回视图位置
        return "hello";
    }
}

如果使用@RequestParam后,地址栏的域名称和注解中的值不一致时则会报错
在这里插入图片描述
当注解中的值和地址栏中的域名称相同时
在这里插入图片描述
在这里插入图片描述

  1. 地址栏提交的请求数据为一个对象时

要求提交的表单域和对象的属性名一致 , 方法参数使用对象即可接收

实体类:

public class Book implements Serializable {
    
    

    private int id;
    private String name;
    private Double price;

    public Book(int id, String name, Double price) {
    
    
        this.id = id;
        this.name = name;
        this.price = price;
    }

    public Book() {
    
    
    }

    public int getId() {
    
    
        return id;
    }

    public void setId(int id) {
    
    
        this.id = id;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public Double getPrice() {
    
    
        return price;
    }

    public void setPrice(Double price) {
    
    
        this.price = price;
    }

    @Override
    public String toString() {
    
    
        return "Book{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", price=" + price +
                '}';
    }


}

在这里插入图片描述
在这里插入图片描述
如果使用对象的话,前端传递的参数名和对象属性名必须一致,否则就是null

在这里插入图片描述
在这里插入图片描述
总结:SpringMVC会将前端接收的参数进行匹配,判断参数对象,假设参数对象中的名字和方法参数对象的属性名相同,可以直接匹配成功使用,否则则匹配不到为null

数据回显前端页面

  1. 实现Controller接口使用ModelAndView进行返回视图和数据
//实现Controller接口,重写handleRequest方法,需要返回一个ModelAndView,装数据,封视图
public class Hello implements Controller {
    
    
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
    
    
        //ModelAndView 模型和视图
        ModelAndView modelAndView = new ModelAndView();
        //封装对象,放在ModelAndView中,作为Model
        modelAndView.addObject("msg","Hello SpringMVC");
        //封装要跳转的视图,放在ModelAndView中
        modelAndView.setViewName("hello");
        //这里要跳转的视图为:WEB-INF/jsp/hello.jsp
        return modelAndView;
    }
}
  1. 使用Model进行存储数据
@Controller
public class RestFulController {
    
    
    @GetMapping("/add")
    public String test(Model model) {
    
    
        //向模型中添加属性msg与值
        model.addAttribute("msg","Hello SpringMVC");
        //寻找视图:WEB-INF/jsp/hello.jsp
        return "hello";
    }
}
  1. 使用ModelMap进行存储数据
@Controller
public class RestFulController {
    
    
    @GetMapping("/add")
    public String test(ModelMap modelMap) {
    
    
        //向模型中添加属性msg与值
        modelMap.addAttribute("msg","Hello SpringMVC");
        //寻找视图:WEB-INF/jsp/hello.jsp
        return "hello";
    }
}

Modle是一个顶层的接口,ModelMap实现了LinkedHashMap<String, Object>是链表集合

Model只适合用于储存数据,简化了新手对于Model对象的操作和理解
ModelMap 继承了 LinkedMap ,除了实现了自身的一些方法,同样的继承 LinkedMap 的方法和特性
ModelAndView 可以在储存数据的同时,可以进行设置返回的逻辑视图,进行控制展示层的跳转

猜你喜欢

转载自blog.csdn.net/weixin_45608165/article/details/114397590