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

   日期:2020-10-17     浏览:80    评论:0    
核心提示:创建视图解析器由于SpringMVC中默认提供的三大组件有可能过时,我们可以手动设置这三大组件1. 手动一个个的设置处理器映射器(不推荐)<!--方式1:手动一个个设置 --> <!-- 处理器映射器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> <!--处理器适配器--> &l

文章目录

    • 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>
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服