Spring MVC的参数装配
自动装配
零散数据的装配
装配原则:传递参数名和方法接收参数名一致
表单
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <form action="/threeController/myform" method="post"> 账号:<input type="text" name="uname"><br> 密码:<input type="password" name="upwd"> <input type="submit" value="提交"> </form> </body> </html>
目标页面
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %> <html> <head> <title>欢迎</title> </head> <body> 欢迎, ${userCode} </body> </html>
控制器
@Controller @RequestMapping("/threeController") public class threeController { @RequestMapping("/myform") public ModelAndView myform(String uname, String upwd){ ModelAndView mv=new ModelAndView(); System.out.println(uname); System.out.println(upwd); mv.addObject("userCode",uname); mv.setViewName("myform"); return mv; } }
手动装配
手动装配@RequestParam name代表页面发送的参数名字
required代表参数是否必须传递 false代表可以不传递,默认为true defaultValue代表默认
model代表给页面传递的数据
@RequestMapping("/myform") public ModelAndView myform(@RequestParam(name="uname",required=false,defaultValue="梅川酷子")String uname,
@RequestParam(name="upwd",required=false,defaultValue="admin")String upwd){ ModelAndView mv=new ModelAndView(); System.out.println(uname); System.out.println(upwd); mv.addObject("userCode",uname); mv.setViewName("myform"); return mv; }
restful风格
get请求时,如果需要传递数据,那么则不能使用以往方式?name=xxx&age=yy
但是现在要遵循restful风格,举例 xxx/yyy/zzz
根据地址栏URL匹配拿值 使用@PathVariable(name=地址栏中的参数映射)
说白了就是:除了 / 以外的符号不能出现
@RequestMapping(value = "/myform2/{uname}/{upwd}") public ModelAndView myform2(@PathVariable(name="uname")String uname, @PathVariable(name="upwd")String upwd){ ModelAndView mv=new ModelAndView(); System.out.println(uname); System.out.println(upwd); mv.addObject("userCode",uname); mv.setViewName("myform"); return mv; }
对象参数:
传递的对象参数和对象中的属性名保持一致
public class UserInfo implements Serializable { private Integer user_id; private String user_name; /** * 注入域属性 * @return */ private List<Teacher> teaList; private Teacher teacher; /*public Teacher getTeacher() { return teacher; } public void setTeacher(Teacher teacher) { this.teacher = teacher; }*/ public Integer getUser_id() { return user_id; } public void setUser_id(Integer user_id) { this.user_id = user_id; } public String getUser_name() { return user_name; } public void setUser_name(String user_name) { this.user_name = user_name; } public List<Teacher> getTeaList() { return teaList; } public void setTeaList(List<Teacher> teaList) { this.teaList = teaList; } public Teacher getTeacher() { return teacher; } public void setTeacher(Teacher teacher) { this.teacher = teacher; } @Override public String toString() { return "UserInfo{" + "user_id=" + user_id + ", user_name='" + user_name + '\'' + ", teaList=" + teaList + ", teacher=" + teacher + '}'; } }
页面代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <form action="/threeController/myform3" method="post"> 账号:<input type="text" name="uname"><br> 密码:<input type="password" name="upwd"><br> info.name:<input type="text" name="user_name"/><br> info.id:<input type="text" name="user_id"/><br> <input type="submit" value="提交"> </form> </body> </html>
目标页面
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>欢迎</title>
</head>
<body>
欢迎, ${userCode}
</body>
</html>
控制器
@RequestMapping(value = "/myform3") public ModelAndView myform3(UserInfo info){ ModelAndView mv=new ModelAndView(); System.out.println(info.toString()); mv.addObject("userCode",info.getUser_name()); mv.setViewName("myform"); return mv; }
域属性
域属性传递:传递参数为:域属性.属性名
页面代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <form action="/threeController/myform4" method="post"> 账号:<input type="text" name="uname"><br> 密码:<input type="password" name="upwd"><br> info.name:<input type="text" name="Teacher.teacher_name"/><br> info.id:<input type="text" name="Teacher.teacher_id"/><br> <input type="submit" value="提交"> </form> </body> </html>
集合参数传递
集合参数传递:集合名[下标].属性名
页面代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <form action="/threeController/myform5" method="post"> 账号:<input type="text" name="uname"><br> 密码:<input type="password" name="upwd"><br> info.name:<input type="text" name="teaList[0].teacher_name"/><br> info.id:<input type="text" name="teaList[1].teacher_id"/><br> <input type="submit" value="提交"> </form> </body> </html>