【SSM - SpringMVC篇】03 - SpringMVC的参数绑定 - 参数自动绑定 - javabean对象参数绑 - 嵌套bean参数绑定

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:请求参数的参数名
  • required:该参数是否必须,默认为true,
  • defaultValue:请求参数的默认值,表示请求参数中必须包含对应的参数,若不存在,将抛出异常。

比如从页面传入的参数名是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>

猜你喜欢

转载自blog.csdn.net/qq_40542534/article/details/109050480