学习目标:
数据处理(接收请求及数据回显)
学习内容:
数据处理(接收请求及数据回显)
学习时间:
学习产出:
数据处理(接收请求及数据回显)
处理提交数据
- 1、提交的域名和处理方法的参数名一致
处理方法:
@Controller
public class UserController {
@RequestMapping("/test1")
public String test1(String name){
System.out.println(name);
return "test";
}
}
后台输出null
- 2、提交的域名和处理方法的参数名不一致
处理方法:
@Controller
public class UserController {
@RequestMapping("/test1")
//加上@RequestParam注解,可以处理参数名不一致,username为提交的域名称
public String test1(@RequestParam("username") String name){
System.out.println(name);
return "test";
}
}
控制台输出:dasda
- 3、提交的是一个对象
要求提交的表单域和对象的属性名一致 , 参数使用对象
创建一个pojo包然后创建一个User类,导入Lombok
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private String name;
private int age;
private int id;
}
UserController类代码修改为:
@Controller
@RequestMapping("user")
public class UserController {
@RequestMapping("/test1")
public String test1(User user){
//1、接收前端参数
System.out.println(user);
//2、将返回的结果传递到前端,
//model.addAttribute("msg",name);
//3、跳转视图
return "test";
}
}
访问:http://localhost:8080/user/test1?name=张三,age=11,id=31231
控制台输出:User(name=张三,age=11,id=31231, age=0, id=0)
使用对象的话,前端传递的参数名和对象名必须一致,否则后台显示null。
将数据显示到前端
- 方式一:使用ModelAndView
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("msg","Controller");
modelAndView.setViewName("test");
return modelAndView;
}
- 方式二:通过ModelMap
/*
ModelMap:继承了LinkedHashMap,拥有LinkedHashMap的全部功能
Model:精简版
*/
@GetMapping("/test2")
public String test1(@RequestParam("username") String name,ModelMap modelMap){
//modelMap封装视图中的数据,相当于request.setAttribute("name",name);
modelMap.addAttribute("msg",name);
System.out.println(name);
return "test";
}
访问:http://localhost:8080/user/test2?username=%E5%BC%A0%E4%B8%89
前端及控制台都显示:张三
- 方式三:通过Model
@GetMapping("/test3")
public String test3(@RequestParam("username") String name,Model model){
//modelMap封装视图中的数据,相当于request.setAttribute("name",name);
model.addAttribute("msg",name);
System.out.println(name);
return "test";
}
简单区别:
- Model 只有寥寥几个方法只适合用于储存数据,简化了新手对于Model对象的操作和理解;
- ModelMap 继承了 LinkedMap ,除了实现了自身的一些方法,同样的继承 LinkedMap 的方法和特性;
- ModelAndView 可以在储存数据的同时,可以进行设置返回的逻辑视图,进行控制展示层的跳转。