对象接收参数
对象接收参数

可以看到这里形参只有两个,为了使传递过来的参数名能和形参名匹配,每个形参前面加了一个注解,当有多个形参的时候,这就意味着要写多个注解,在源代码上写那么多注解,是挺麻烦的一件事,有什么办法可以解决?
--> 用一个对象来接收请求参数
index.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<p>提交参数给controller</p>
<form action="receiveproperty.do" method="post">
姓名:<input type="text" name="name"> <br/>
年龄:<input type="text" name="age"> <br/>
<input type="submit" value="提交参数">
</form>
<br />
<p>使用java对象接收请求参数</p>
<form action="receiveobject.do" method="post">
姓名:<input type="text" name="name"> <br/>
年龄:<input type="text" name="age"> <br/>
<input type="submit" value="提交参数">
</form>
</body>
</html>
MyController.java:
/**
* 调度器方法形参是java对象,这个对象的属性名和请求中参数名一样
* 框架会创建形参的java对象,给属性赋值。请求中的参数是name,框架会调用setName()
* @return
*/
@RequestMapping(value = "/receiveobject.do")
public ModelAndView receiveParam(Student myStudent) {
System.out.println("receiveParam:name=" + myStudent.getName() + " age=" + myStudent.getAge());
ModelAndView mv = new ModelAndView();
mv.addObject("myname", myStudent.getName());
mv.addObject("myage", myStudent.getAge());
mv.addObject("mystudent",myStudent);
mv.setViewName("show");
return mv;
}
可以这么理解,现在receiveParam()方法的形参是Student myStudent,首先 请求参数 赋值给--> 对象(Student)形参,然后receiveParam()方法通过Student对象的get方法获取值。
Student.java:
package com.bjpowernode.vo;
//保存请求参数值的一个普通类
public class Student {
//要求:属性名和请求中的参数名一样
private String name;
private Integer age;
public Student() {
System.out.println("===Student的无参构造方法===");
}
public String getName() {
return name;
}
public void setName(String name) {
System.out.println("setName"+name);
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
System.out.println("setAge"+age);
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
普通的实体类
show.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>/WEB-INF/view/show.jsp从request作用域获取数据</h3>
<h3>myname数据:${myname}</h3>
<br/>
<h3>myage数据:${myage}</h3>
<br/>
<h3>student数据:${mystudent}</h3>
</body>
</html>
show.jsp 与 MyCotroller.java的对象关系

运行:


框架会创建这些对象(中央调度器方法的形参),并给属性赋值
参数少时用逐个接收,参数多时用对象接收

浙公网安备 33010602011771号