文章目录
-
- SpringMVC的参数绑定
-
- 1 传统方式进行参数传递
- 2 通过SpringMVC的参数绑定实现【***用这个就行】
-
- 2.1 SpringMVC的基本数据类型的参数绑定
-
- 2.1.1 方法形式参数名和页面传入参数名一致
- 2.1.2 方法形式参数名和页面传入参数名不一致
- 2.1.3 总结
- 2.2 SpringMVC的对象数据类型`pojo`参数绑定
- 案例
- 2.3 SpringMVC的嵌套javabean参数绑定
SpringMVC的参数绑定
用户请求服务器的时候会向后台传递参数(Controller), 如何来快速的接收到用户传递的参数,可以通过参数绑定来实现。
1 传统方式进行参数传递
在Controller中的方法的形式参数上直接声明HttpServletRequest, HttpServletResponse , HttpSession(就是以前的JAVAEE获取方法)
//注解,通过这个地址login1.action执行当前方法
@RequestMapping("test01.action")
public ModelAndView test01(HttpServletRequest req){
//springmvc会将请求对象 赋值给req
String username= req.getParameter("username");
String password= req.getParameter("password");
System.out.println(username);
System.out.println(password);
ModelAndView mv= new ModelAndView();
mv.setViewName("main");//通过配置视图解析器前后缀,找到指定界面
return mv;
}
2 通过SpringMVC的参数绑定实现【***用这个就行】
对于普通的数据类型(8大基本数据类型、String数据类型)会直接自动进行参数绑定【springmvc的内部有默认的类型转换器,比如Spring -> int】;但是如果是自定义数据类型或其他数据类型,需要创建一个bean对象类,进行封装调用。
2.1 SpringMVC的基本数据类型的参数绑定
2.1.1 方法形式参数名和页面传入参数名一致
只需要保证请求作用域request(也就是从浏览器传过来的值)的name和方法上的形式参数名称一致,就可以自动赋值。
@RequestMapping("test02.action")
public ModelAndView test02(String username1,String password){
//springmvc会将请求对象,赋值给request
//参数绑定就是自动从requeest,将参数值取出来赋值给形式参数username password
System.out.println(username1);
System.out.println(password);
ModelAndView mv= new ModelAndView();
mv.setViewName("main");通过配置视图解析器前后缀,找到指定界面
return mv;
}
2.1.2 方法形式参数名和页面传入参数名不一致
如果你的形参的名字和页面传入的参数名字不一致,可以使用@RequestParam
注解,将参数名不同的设置@RequestParam(value="页面的参数名")
@RequestParam的三个值
- value:请求参数的参数名, 注解中value值要和页面传入的参数名称一致。
- required:该参数是否必须,默认为true,如果没有给这个值,则出现400错误页面。
- defaultValue:请求参数的默认值,比如defaultValue = “default”,如果给了参数,就获取,如果没有给参数,则默认为default的值。
比如从页面传入的参数名是username和password,接收参数是name和password,需要对name增加注解,应该写成下面这种情况
public ModelAndView test03(@RequestParam(value="username") String name, String password){
//需要将形式参数name标明只的是页面参数username
System.out.println(name);
System.out.println(password);
ModelAndView mv= new ModelAndView();
mv.setViewName("main");
return mv;
}
2.1.3 总结
- 基本数据类型和String的参数自动绑定
- springmvc会自动将请求对象,赋值给request,参数自动绑定就是自动的从request中奖数据赋值给参数列表
- 前提条件(参数列表和请求request域中的名称相同,不同就不赋值)
- 自动的从request中获取值赋值给参数列表(名称要相同,而且只能处理简单的参数(8中基本数据类型 + String))
- 如果从页面传入的参数名和方法形式参数不一样,就需要通过
@RequestParam
注解来设置(可以设置多个,顺序和形式参数要一致)- 如果参数名称不同可以通过注解
@RequestParam
补救,如果没有注解存在,就按参数列表来获取值,如果有注解存在,先按注解赋值(有注解优先看注解)
2.2 SpringMVC的对象数据类型pojo
参数绑定
pojo概念:
POJO(Plain Ordinary Java Object)就是简单的Java对象,实际就是普通JavaBeans。(需要创建对应的javabean类)
其中只有一些属性及其getter setter方法的类,没有别的什么业务逻辑方法。
使用场景
当页面需要传递多个参数时(一个表单等情况),我们可以将多个参数封装到一个JavaBean类。(使用POJO类进行数据封装,就是创建不同javabean对象封装)。
将这个JavaBean作为方法形参,SpringMVC可以直接将页面的数据赋值给JavaBean对象(参数列表参数自动赋值)。
【前提条件】JavaBean类中成员变量的名字和必须和表单中name属性的值一样(因为取值赋值通过get/set方法)。
案例
前台页面jsp
<input type="text" name="username" placeholder="请输入用户名"/>
<input type="password" name="password" placeholder="请输入密码"/>
我们就可以将其封装成一个User的pojp
对象
public class User{
private String username;
private String password;
//省略get/set方法(一定得有)
}
参数绑定:
@RequestMapping("test04.action")
//从页面获取参数然后赋值给javabean对象的同名属性(通过set方法)
public ModelAndView test04(User user){
//springMVC可以将表单的数据赋值给一个javaBean对象
//通过get方法获取已经被自动赋值的javabean对象属性
System.out.println(user.getUsername());
System.out.println(user.getPassword());
ModelAndView mv= new ModelAndView();
mv.setViewName("main");
return mv;
}
2.3 SpringMVC的嵌套javabean参数绑定
概念
封装多个不同类型的javabean对象做成员变量(就是一个javabean又封装了多个javabean对象作为属性)。
当前的javaBean类的成员变量有复杂类型(其他javabean)如:Person类中有birthday等变量
通过当前成员属性名(javabean对象作为成员属性名)加.
点来获取它的属性
javabean
public class Person {
private int id;
private String username;
private String password;
private Birthday birthday;
//省略get/set方法
}
public class Birthday {
private int year;
private int month;
private int day;
//省略get/set方法
}
后台获取方法
@RequestMapping("test05.action")
//按照name相同自动参数绑定赋值
public ModelAndView test05(Person person){
//springMVC可以将表单的数据赋值给 一个javaBean对象
System.out.println(person.getUsername());
System.out.println(person.getPassword());
System.out.println(person.getBirthday().getYear());
System.out.println(person.getBirthday().getMonth());
System.out.println(person.getBirthday().getDay());
ModelAndView mv= new ModelAndView();
mv.setViewName("main");
return mv;
}
前台jsp写法
<form method="post" action="${pageContext.request.contextPath}/registerPerson.action">
用户名: <input type="text" name="username" /><br/>
用户密码: <input type="text" name="password"/><br/>
年 <input type="text" name="birthday.year"/><br/>
月<input type="text" name="birthday.month"/><br/>
日<input type="text" name="birthday.day"/><br/>
<input type="submit" value="添加"/><br/>
</form>