8.参数接收与数据回显
8.1 处理前端起脚数据
1.如果提交参数的name和Controller的参数name一样,就会直接获取到
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Index</title>
</head>
<body>
<form action=/test>
<input type="text" name="username"> <!--name=username-->
<input type="submit">
</form>
</body>
</html>
@Controller
public class TestController{
//模板URL ,会直接通过 / 的形式绑定a与b
@GetMapping("/test")
//参数名为 username , 可以直接获取到前端名为username的参数
public String test(Model model,String username) throws IOException {
//封装数据
model.addAttribute("msg",username);
System.out.println(username);
return "hello";
}
}
2.如果提交的name和参数名不同 ,使用注解@RequestParam
@Controller
public class TestController{
//模板URL ,会直接通过 / 的形式绑定a与b
@GetMapping("/test")
//使用@RequestParam注解 , 参数name会接收到name=username的前端参数
public String test(Model model,@RequestParam("username") String name) throws IOException {
//封装数据
model.addAttribute("msg",name);
System.out.println(name);
return "hello";
}
}
3.如果前端提交的是一个对象
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Index</title>
</head>
<body>
<form action=/user/t1> <!--传递一个User对象的所有属性-->
<input type="text" name="name">
<input type="text" name="id">
<input type="text" name="age">
<input type="submit">
</form>
</body>
</html>
Controller自动解析name对应类的属性名
@Controller
@RequestMapping("/user")
public class UserController {
@GetMapping("/t1")
public String test1(User user) {
//前端接收的是一个对象 : id name age
/*
* 1.接受前端用户传递的参数,判断参数的名字
* 2.假设传递的是一个User对象,匹配User对象中的字段名,名字一致就可以匹配得到 (name与属性名对应)
* */
//如果不一致,返回null
System.out.println(user);
return "hello";
}
}
User(id=321, name=123, age=123)
8.2 数据回显到前端
-
通过ModelAndView (回显数据的同时返回视图页面)
public class HelloController implements Controller { //实际上还是一个Servlet @Override public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { //模型和视图 ModelAndView mv = new ModelAndView(); //一个中间层ModelAndView //封装对象,放在ModelAndView中 mv.addObject("msg","HelloSpringMVC"); //封装要跳转的视图,放在ModelAndView中 mv.setViewName("hello"); return mv; //返回这个ModelAndView , 通过解析其中的数据,得到要返回的数据和对应页面 } }
-
通过Model
@Controller @RequestMapping("/user") public class UserController { @GetMapping("/t1") public String test1(User user, Model model) { //model为参数,可以携带数据返回前端 //前端接收的是一个对象 : id name age /* * 1.接受前端用户传递的参数,判断参数的名字 * 2.假设传递的是一个User对象,匹配User对象中的字段名,名字一致就可以匹配得到 * */ System.out.println(user); model.addAttribute(user); //利用model把user传给前端 return "hello"; } }
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Test</title> </head> <!--获取传过来的值--> ${user.id} <br/> ${user.name} <br/> ${user.age} </body> </html>
-
通过ModelMap (拥有LinkedMap的全部功能,特性更多)