前面两章就介绍了什么是springmvc,springmvc的框架原理,并且会简单的使用springmvc以及ssm的整合,从这一章节来看,就开始讲解springmvc的各种功能实现,慢慢消化

                          --WZY

一、参数绑定

      1.1、什么是参数绑定?

        客户在浏览器端会提交一些参数到服务器端,比如用户的登录等,就会传username 和 password过来,springmvc则通过参数绑定组件将请求参数的内容进行数据转换,然后将转换后的值覆给controller方法的形参,这就是参数绑定的过程,其实,springmvc就是使用controller方法形参来接收请求的参数

      1.2、springmvc默认支持的参数类型

        可以在Controller方法的形参中直接使用以下类型

          HttpServletRequest、HttpServletResponse、HttpSession:这三个很熟悉,不做解释

          Model/ModelMap:将model数据填充到request域,比如之前的ModelAndView对象添加list,其实就是将list添加到request作用域,只是ModelAndView对象不仅能够添加model数据,还能够添加视图。而Model对象的功能就只有将model数据填充到request作用域

          

        如图所示,就是这样,在形参中使用这几个对象,那么在方法中就能直接用这几个对象了。有了request对象,就能够使用我们以前学过的老方法获取请求参数等一些信息了。

      1.3、绑定简单类型的参数

        上面讲解的只是默认支持的参数类型,有request等一些对象,必然是很好很方便的一件事,比如获取请求参数就可以得到解决了,但是springmvc提供更强大一些的功能。

        绑定简单类型的参数规则:

          1.3.1、如果请求参数的key和Controller类中方法的形参名称一致,那么就直接绑定;

            请求url:http://localhost:8080/ssm_test/editItems.do?id=2   模拟客户端发送了一个id=2的请求参数过来,这里使用的是get方式,如果post方式也是一样的道理

            Controller方法:

                

            分析:形参中的名称与请求参数的名称相同,固可以直接绑定。

          1.3.2、如果请求参数的key和Controller类中方法的形参名称不一致,那么就需要使用@RequestParam注解来进行参数绑定

            请求url:http://localhost:8080/ssm_test/editItems.do?itemsId=2   模拟客户端发送了一个id=2的请求参数过来

            Controller方法:

                

            分析:使用@RequestParam("itemsId")注解将名为itemsId的请求参数的值赋值给形参中名为id的参数。注意,在对应的形参前面加该注解。

      1.4、绑定pojo

        使用springmvc绑定pojo的参数时,要求jsp中input框的name值要和Controller方法形参的pojo对象中的属性名称一致,如下图

          jsp页面

              

          controller方法

                

          Items类

              

      1.5、参数绑定时日期类型转换问题

        在我们从jsp页面传过来的参数的类型都是object的,而我们自己编写的是有具体类型的,比如id是需要int型,name是需要string型,而springmvc就会帮我们将这些简单的类型自动进行类型转换,但是当遇到Date类型的时候,就转换不了,需要我们自己写一个类型转换器,然后给适配器配上,从而jsp传过来的参数能够转换成我们需要的日期类型,如果不自定义类型转换器的话,会报错             即把请求中的日期字符串转成java的日期类型,该日期类型与pojo中日期属性的类型保持一致            

        1.5.1、自定义Converter

              

package com.wuhao.ssm.util;

import java.text.SimpleDateFormat;
import java.util.Date; import org.springframework.core.convert.converter.Converter; public class DateConverter implements Converter<String,Date> { @Override
public Date convert(String source) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
return sdf.parse(source);
} catch (Exception e) {
e.printStackTrace();
}
return null;
} }

DateConverter.java

  

        1.5.2、在springmvc.xml中配置该转换器

          第一种方式(推荐):两步搞定

            修改mvc:annotation-driven的配置

            配置自定义转换器绑定

              

    <!-- 配置处理器映射器和处理器适配器 -->
<mvc:annotation-driven conversion-service="conversionService" /> <!-- 自定义参数绑定 -->
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<list>
<!-- 日期类型转换器 -->
<bean class="com.wuhao.ssm.util.DateConverter" />
</list>
</property>
</bean>

springmvc.xml中配置日期转换器

          第二种方式:

              

    <!--注解适配器,也就是不使用spring标签对注解进行管理 -->
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="webBindingInitializer" ref="customBinder" />
</bean> <!-- 自定义webBinder -->
<bean id="customBinder"
class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
<property name="conversionService" ref="conversionService" />
</bean>
<!-- conversionService -->
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<!-- 转换器 -->
<property name="converters">
<list>
<bean class="com.wuhao.ssm.util.DateConverter" />
</list>
</property>
</bean>

      1.6、包装pojo参数绑定

        与1.4的pojo参数绑定的区别在于,这里将pojo放入一个包装类中,如下图,将Items类放入了ItemsQueryVO类中,ItemsQueryVO就是一个包装pojo

          ItemsQueryVO

            

          jsp

                  

          controller:直接使用包装pojo接收

            

            

      1.7、集合参数的绑定

        1.7.1、简单类型的集合参数绑定,可以使用数组或者List来接收

        比如jsp页面有一些多选框,复选框,这样提交过来,就需要使用集合参数的绑定了。

        jsp

          

        controller

          使用数组来接收

            形参中的数组类型要和jsp中值的类型一致,形参中的参数名称要和jsp中name一致。也就是itemsid

              

          使用list来接收

            形参中list的泛型跟jsp中的值的类型一致,形参中参数名称要和jsp中name一致。(我们想象中是这样)

                  

            结果,会报错,嘿嘿,因为不能在形参中直接定义List类型的参数,如果想要使用list来接收,需要把List类型的参数定义在包装POJO中,Controller的方法形参使用该包装POJO,下面讲解。所以如果使用接收简单类型的集合参数,使用数组最为方便。

        1.7.2、pojo类型的集合参数绑定,可以使用数组或者list来接收

          注意:pojo类型的集合参数绑定时,接收它的数组或者List,都不能直接定义在Controller方法形参上,需要把它定义到一个包装pojo中,如何把这个包装pojo放到形参

          使用list。

          包装pojo类 ItemsQueryVo, 将需要装items集合的对象放入包装类中。

              

          jsp

              

          这里注意:标记的是name属性,不要与value属性搞混淆了,在ItemsQueryVo中有名为itemsList的list,所以在jsp中的name就需要一层层匹配下去才能正确将其属性值装载到正确的位置,list的格式为:itemsList[下标].name。 就拿这个分析,itemsList就可以找打ItemsQueryVo中的itemsList, itemsList[1],就可以定位到itemsList中的第一个items,itemsList[1].name就可以定位到itemsList中的第一个items的name属性,这样一来就看得懂了。

          

          controller

                

        1.7.3、总结上面两种

          总结一下集合参数的绑定

            对于简单类型的集合参数绑定,则使用数组作为形参来接收请求的集合参数

            对于pojo类型的集合参数绑定,则使用数组或者list两者都可以,一般常用list。

              注意:这种pojo类型的集合参数绑定,必须将list或者数组作为一个包装类中的属性,然后使用该包装类对象作为形参来接收请求参数。       

        1.7.4、map集合类型绑定

          这个用的不多,一般只是用list,这个也稍微了解一下,等需要的时候会用即可,贴出关键代码就行

          同样,需要使用包装pojo类。

          ItemsQueryVo

            

          jsp:格式为下面这样。就能够匹配到

            

          controller

            

    

二、总结

      看了这么多中参数绑定的例子,我觉得用一句话来概括最为准确,万变不离其宗。有耐心看一下就自然就会用了,真的很简单。只是知识比较多比较细,需要理解的也不多。

springmvc(三) 参数绑定、的更多相关文章

  1. SpringMVC(三) —— 参数绑定和数据回显

    参数绑定的过程:就是页面向后台传递参数,后台接受的一个过程. 默认支持的参数类型:(就是你在方法上以形参的形式去定义一下的类型,就可以直接使用它) HttpServletRequest HttpSer ...

  2. springmvc(2)--参数绑定

    一.以实例来看springmvc各种参数绑定方式   先定义个dto类: public class RestInDto implements Serializable { private static ...

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

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

  4. <SpringMvc>入门三 参数绑定

    1.get请求 <%--请求参数的绑定--%> <%--get请求参数--%> <a href="/param/testParam1?username=tom& ...

  5. SpringMVC【参数绑定、数据回显、文件上传】

    前言 本文主要讲解的知识点如下: 参数绑定 数据回显 文件上传 参数绑定 我们在Controller使用方法参数接收值,就是把web端的值给接收到Controller中处理,这个过程就叫做参数绑定.. ...

  6. SpringMVC中参数绑定

    SpringMVC中请求参数的接收主要有两种方式, 一种是基于HttpServletRequest对象获取, 另外一种是通过Controller中的形参获取 一  通过HttpServletReque ...

  7. SpringMVC学习笔记之二(SpringMVC高级参数绑定)

    一.高级参数绑定 1.1 绑定数组 需求:在商品列表页面选中多个商品,然后删除. 需求分析:功能要求商品列表页面中的每个商品前有一个checkbok,选中多个商品后点击删除按钮把商品id传递给Cont ...

  8. SpringMVC的参数绑定

    一.@RequestMapping注解说明   通过@RequestMapping注解可以定义不同的处理器映射规则. URL路径映射 @RequestMapping(value="/item ...

  9. 【SpringMVC】参数绑定

    一.概述 1.3 参数绑定过程 1.2 @RequestParam 二.自定义绑定使用属性编辑器 2.1 使用WebDataBinder(了解) 2.2 使用WebBindingInitializer ...

随机推荐

  1. jQuery对象的创建(一)

    在jQuery的常规用法中,执行"$()"返回的是一个jQuery对象,在源码中,它是这样定义的: ... var jQuery = function() { return new ...

  2. Java中设计模式之生产者消费者模式-4

    引言 生产者-消费者(producer-consumer)问题,也称作有界缓冲区(bounded-buffer)问题,两个进程共享一个公共的固定大小的缓冲区.其中一个是生产者,用于将消息放入缓冲区:另 ...

  3. javaSE_07Java中类和对象-封装特性--练习

    1.编写封装一个学生类,有姓名,有年龄,有性别,有英语成绩,数学成绩,语文成绩,一个学生类,我们关注姓名,年龄,学历等信息,要求年龄必须在19-40岁之间,默认为19,学历必须是大专,本科,研究生这几 ...

  4. GPU编程--宏观理解篇(1)

    GPU编程与CPU编程最大的不同可以概括为以下两点: "The same program is executed on many data elements in parallel" ...

  5. 看过WWDC2017的闲谈

    2017年6月6日凌晨的138分钟,是属于WWDC2017的. 鉴于时间问题,没有熬夜看,所以早上起来趁着公司不太忙就看了看.整体的内容没有太多变化,依然是苹果的主产品,不过这次的one more t ...

  6. 前端打包文件在nginx上403的解决办法

    遇到的问题表现出来就是如题所述,因此作为题目. 我们知道,前端有很多方便的构建和打包工具,如webpack等,通常我们会把前端文件打包到dist目录下,部署到服务器上,如nginx等. 这次遇到的问题 ...

  7. 黑马程序员:3分钟带你读懂C/C++学习路线

    随着互联网及互联网+深入蓬勃的发展,经过40余年的时间洗礼,C/C++俨然已成为一门贵族语言,出色的性能使之成为高级语言中的性能王者.而在今天,它又扮演着什么样重要的角色呢?请往下看: 后端服务器,移 ...

  8. JAVA设计模式初探之装饰者模式

    定义:动态给一个对象添加一些额外的职责,就象在墙上刷油漆.使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活.设计初衷:通常可以使用继承来实现功能的拓展,如果这些需要拓展的功能的种 ...

  9. 软件测试基础(软件测试分类和工具组)firebug、firepath的安装

    白盒测试:需要了解内部结构和代码 黑盒测试:不关心内部结构和代码 灰盒测试:介于白盒黑盒之间 静态测试:测试时不执行被测试软件 动态测试:测试时执行被测试软件 单元测试:测试软件的单元模块 集成测试: ...

  10. 在WIN SERVER 2016上安装DOCKER(带过坑)

    目录 1    概要    1 1.1    主要优势    1 2    在Windows Server上部署Docker    2 概要 博客使用Word发博,发布后,排版会出现很多问题,敬请谅解 ...