《SpringMVC从入门到放肆》十、SpringMVC注解式开发(复杂参数接收)
上一篇我们学习了简单的参数接收方式,以及对编码的统一处理。今天我们来接收对象参数。
一、接收对象参数
jsp页面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'index.jsp' starting page</title> </head> <body> <form action="${pageContext.request.contextPath }/user/login.do"> 姓名:<input name="name" type="text" /> 年龄:<input name="age" type="text" /> <input type="submit" value="注册" /> </form> </body> </html>
Entity:
package cn.wechatbao.entity; public class Student { private String name; private int age; //省略getter、setter }
Controller:
@RequestMapping("/login.do") public ModelAndView login(Student student) throws Exception { System.out.println("name="+student.getName()); System.out.println("age="+student.getAge()); ModelAndView mv = new ModelAndView(); mv.addObject("student", student); mv.setViewName("/WEB-INF/jsp/success.jsp"); return mv; }
成功的提示页面(success.jsp):
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>SpringMVC1</title> </head> <body> ${student } </body> </html>
注意:整体接收需要表单的name属性值与实体的属性名一致。比如input的name为age,那么与之对应的实体类中,必须有一个age属性,并且该age属性需要有getter、setter方法。
二、域属性参数接收
域属性参数就是在A类中有一个为B类的属性。这时,我们对刚才的代码进行修改。新增School类。如下:
public class School { private String sname; private String address; //省略getter、setter }
修改Student类,如下:
public class Student { private String name; private int age; private School school; //省略getter、setter }
修改index.jsp页面的Form表单,如下:
<form action="${pageContext.request.contextPath }/user/login.do"> 姓名:<input name="name" type="text" /> 年龄:<input name="age" type="text" /> 学校名称:<input name="school.sname" type="text" /> 学校地址:<input name="school.address" type="text" /> <input type="submit" value="注册" /> </form>
三、接收路径变量
路径变量不作过多的介绍,只要了解就OK了。访问路径如下:
http://localhost:8080/SpringMVC/user/zhangsan/24/register.do
Controller:
@RequestMapping("/{name}/{age}/register.do") public ModelAndView register(@PathVariable String name,@PathVariable int age) throws Exception { System.out.println("name="+name); System.out.println("age="+age); ModelAndView mv = new ModelAndView(); mv.addObject("name", name); mv.addObject("age", age); mv.setViewName("/WEB-INF/jsp/success.jsp"); return mv; }
注意:只是使用了一个@PathVariable的注解,该注解也可以指定name,如@PathVariable("pname")之类的。