章
目
录
1、参数绑定含义
参数绑定,简单来说就是客户端发送请求,而请求中包含一些数据,那么这些数据怎么到达 Controller ?这在实际项目开发中也是用到的最多的,那么 SpringMVC 的参数绑定是怎么实现的呢?下面我们来详细的讲解。
2、SpringMVC 参数绑定
在 SpringMVC 中,提交请求的数据是通过方法形参来接收的。从客户端请求的 key/value 数据,经过参数绑定,将 key/value 数据绑定到 Controller 的形参上,然后在 Controller 就可以直接使用该形参。
3、默认支持的类型
SpringMVC 有支持的默认参数类型,我们直接在形参上给出这些默认类型的声明,就能直接使用了。如下:
- HttpServletRequest 对象
- HttpServletResponse 对象
- HttpSession 对象
- Model/ModelMap 对象
1)Controller 代码:

2)表单代码:

3)然后访问,页面显示如下:

这里我们重点说一下 Model/ModelMap,ModelMap是Model接口的一个实现类,作用是将Model数据填充到request域,即使使用Model接口,其内部绑定还是由ModelMap来实现
4、基本数据类型的绑定
哪些是基本数据类型,我们这里重新总结一下:
一、byte,占用一个字节,取值范围为 -128-127,默认是“\u0000”,表示空
二、short,占用两个字节,取值范围为 -32768-32767
三、int,占用四个字节,-2147483648-2147483647
四、long,占用八个字节,对 long 型变量赋值时必须加上”L”或“l”,否则不认为是 long 型
五、float,占用四个字节,对 float 型进行赋值的时候必须加上“F”或“f”,如果不加,会产生编译错误,因为系统
自动将其定义为 double 型变量。double转换为float类型数据会损失精度。float a = 12.23产生编译错误的,float a = 12是正确的
六、double,占用八个字节,对 double 型变量赋值的时候最好加上“D”或“d”,但加不加不是硬性规定
七、char,占用两个字节,在定义字符型变量时,要用单引号括起来
八、boolean,只有两个值“true”和“false”,默认值为false,不能用0或非0来代替,这点和C语言不同
1)JSP 页面代码:

2)Controller 代码:

结果是 打印出了表单里面的 value 的值。
注意:表单中input的name值和Controller的参数变量名保持一致,就能完成数据绑定。那么如果不一致呢?我们使用 @RequestParam 注解来完成,如下:
JSP页面代码不变,保持原样,Controller 代码如下:

使用注解
@RequestParam
,我们可以使用任意形参,但是注解里面的 value 属性值要和表单的name属性值一样。5、包装数据类型的绑定
包装类型如Integer、Long、Byte、Double、Float、Short,(String 类型在这也是适用的)这里我们以 Integer 为例
1)Controller 代码为:
和基本数据类型基本一样,不同之处在于,表单传递过来的数据可以为null或””,以上面代码为例,如果表单中num为””或者表单中无num这个input,那么,Controller方法参数中的num值则为null。
6、POJO(实体类)类型的绑定
1)新建User.java
2)JSP页面:
注意输入框的 name 属性值和上面 POJO 实体类的属性保持一致即可映射成功。
3)Controller :
4)然后测试,发现正常获取到了用户信息
7、复合POJO(实体类)类型的绑定
1)这里我们增加一个实体类,ContactInfo.java
2)然后在上面的User.java中增加一个属性 private ContactInfo contactInfo,生成get/set,重写toString。
3)JSP 页面:
注意属性name的命名,User.java 的复合属性名.字段名
4) Controller:
User对象中有ContactInfo属性,但是,在表单代码中,需要使用“属性名(对象类型的属性).属性名”来命名input的name。
8、数组类型的绑定
9、List类型的绑定
1)创建 UserVo.java,封装 List
2)JSP 页面
3)Controller
10、Map类型的绑定
1)首先在 UserVo 里面增加一个属性 Map
2)JSP页面,注意看 输入框 name 的属性值
3)Controller 中获取页面的属性
11、遇到的问题
1)form表单无法提交input输入框属性设置为 disabled 的内容
比如:
<input type="text" disabled="disabled" name="metadataName" maxlength="50" placeholder="这里输入模型英文名称" title="模型英文名称" "/>
具有 disabled=”disabled” 的属性,提交到 Controller后,metadataName 的值为null
改为 readonly=”readonly”
readonly:针对input(text / password)和textarea有效,在设置为true的情况下,用户可以获得焦点,但是不能编辑,在提交表单时,输入项会作为form的内容提交。
disabled:针对所有表单元素(select,button,input,textarea等),在设置为disabled为true的情况下,表单输入项不能获得焦点,用户的所有操作无意义,在提交表单时,表单输入项不会被提交。
2)中文乱码
在web.xml中配置编码过滤器
