文章目录

  • 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会将请求对象 赋值给reqString 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 passwordSystem.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标明只的是页面参数usernameSystem.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>

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

  1. Java SSM篇5——SpringMVC

    Java SSM篇5--SpringMVC 1.MVC模式 MVC是软件工程中的一种软件架构模式,它是一种分离业务逻辑与显示界面的开发思想 M(model)模型:处理业务逻辑,封装实体 V(view) ...

  2. (转)SpringMVC学习(六)——SpringMVC高级参数绑定与@RequestMapping注解

    http://blog.csdn.net/yerenyuan_pku/article/details/72511749 高级参数绑定 现在进入SpringMVC高级参数绑定的学习,本文所有案例代码的编 ...

  3. (转)SpringMVC学习(五)——SpringMVC的参数绑定

    http://blog.csdn.net/yerenyuan_pku/article/details/72511611 SpringMVC中的参数绑定还是蛮重要的,所以单独开一篇文章来讲解.本文所有案 ...

  4. spring api 中文_【每日3分钟技术干货 | 面试题+答案 | Springamp;SpringMVC篇

    1. 什么是spring? Spring 是个java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring 框架目标是简化Jav ...

  5. 【SSM框架系列】SpringMVC的请求和响应

    request和response request对象的作用 获取请求参数 作为域对象存取数据 获取请求头 请求转发 response功能 回写数据,JSON格式字符串 页面跳转(请求重定向) Spri ...

  6. 【檀越剑指大厂—SpringMVC】SpringMVC篇

    一.基础概念 1.什么是 MVC MVC 是模型(Model).视图(View).控制器(Controller)的简写,是一种软件设计规范. 是将业务逻辑.数据.显示分离的方法来组织代码. MVC 主 ...

  7. idea创建SSM项目(Spring+SpringMVC+MyBatis)

    idea创建SSM项目(Spring+SpringMVC+MyBatis) 项目创建 创建数据库 自动生成mapper 先做一个简单的测试 以下配置 可参考博客https://blog.csdn.ne ...

  8. 【SSM框架系列】Spring-MVC的组件解析

    SpringMVC完整执行流程 用户发送请求至前端控制器DispatcherServlet. DispatcherServlet收到请求调用HandlerMapping处理器映射器. 处理器映射器找到 ...

  9. 【SSM框架系列】SpringMVC基本介绍

    SpringMVC 是web层的框架 SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于SpringFrameWork 的后续产品,已经融合在 ...

最新文章

  1. c和python区别_C语言和python的区别
  2. 基于现代神经网络通用人工智能架构设计
  3. 解决img标签间距问题
  4. 深入理解Spark Streaming执行模型
  5. UVA11388GCD LCM
  6. [POJ1155]TELE
  7. MFC 操作配置文件INI的方法
  8. 简单聊聊C#中lock关键字
  9. 关于Config.ARGB_8888、Config.ALPHA_8、Config.ARGB_4444、Config.RGB_565的理解
  10. 面试问题背后的“猫腻”
  11. Windos环境用Nginx配置反向代理和负载均衡
  12. sql还原数据库备份数据库_有关数据库备份,还原和恢复SQL面试问题–第一部分
  13. codeforces round div2,3周赛补题计划(从开学到期末)
  14. MyBB论坛兼容智能手机的解决方案
  15. oracle查询sql保留小数点前0,去掉小数位后末尾的0
  16. 东北大学金工实习考试题库
  17. c语言strict函数的作用,C语言实现进制转换函数的实例详解
  18. 图像细化 A fast parallel algorithm for thinning digital patterns
  19. Unity3D编辑器扩展--自定义创建圆锥体
  20. ssm:Unable to process Jar entry

热门文章

  1. 黄金连分数(python)
  2. Ubuntu安装ClickHouse
  3. arduino ide 2.0 中文设置
  4. 数据库树形结构存储方法的选择
  5. 前端面试JS必备基础之深浅拷贝和this指向问题@莫成尘
  6. Android ninja介绍
  7. 基于SpringBoot框架图片销售网站的设计与实现
  8. SQL中row_numer、rank、dense_rank的区别与用途
  9. Gradient Descent for one-hidden-layer-function(单隐藏层神经网络的梯度下降)
  10. 加州大学欧文分校6个最受欢迎的英语语法MOOC课程