美文网首页SSM
SSM框架系列学习总结9之SpringMVC参数绑定

SSM框架系列学习总结9之SpringMVC参数绑定

作者: 梦蓝樱飞2020 | 来源:发表于2018-02-06 21:40 被阅读60次

    首先, 我总结复习之前的内容, 详细地介绍一下SpringMVC各组件的作用和用法.
    1.配置前端控制器
    2.配置映射器
    3.配置适配器
    4.配置视图解析器
    5.配置Handler

    DispatcherServlet.properties
    springmvc中:当我们没有手动去配置,映射器,适配器,视图解析器这么几个组件的时候,那么会自动去加载DispatcherServlet.properties配置文件的默认配置

    image.png

    另外一个映射器和适配器(非注解), 这两种不常用!
    适配器: HttpRequestHandlerAdapter
    该适配器要求Handler实现HttpRequestHandler接口

    映射器:
    org.springframework.web.servlet.handler.SimpleUrlHandlerMapping

    在视图解析器中配置jsp路径的前缀和后缀,那么在返会ModelAndView的时候,JSP路径会默认加上下面配置的前缀和后缀

    Springmvc的注解形式的适配器和映射器

    AnnotationMethodHandlerAdapter
    DefaultAnnotationHandlerMapping
    上面的映射器和适配器从3.2版本开始就已经过时了
    3.2版本以后采用的注解映射器和注解适配器
    映射器:
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
    适配器:
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter

    Springmvc.xml文件中的配置


    image.png
    image.png

    相关注解:
    @Controller:申明下面的类是一个Handler, 并且会由springIOC容器来创建实例
    @RequestMapping: 指定Handler中某个方法的访问路径
    那么采用注解形式开发,可以在一个Handler中编写多个业务方法

    参数的绑定

    在springmvc中有几个参数是默认已经绑定好了的
    HttpServletReuqest
    HttpServletResponse
    Model
    HttpSession
    如果要是用上面几个参数,只需要在形式参数中绑定即可

    1.简单类型的绑定

    默认情况下,请求中的参数名必须要和Controller方法中的形参的参数名一致才能绑定成功


    image.png image.png

    上面的注解表示请求中的参数名要和value的值保持一样 才能绑定成功
    required: 表示该参数是否是必须的。
    defaultValue: 给这个参数一个默认值。

    2.pojo类型的绑定

    a) 简单类型pojo
    要求请求中的参数名和pojo中的属性名保持一致才能绑定

    b) 包装类型的pojo
    如果绑定的类型是包装的pojo类型, 那么请求参数名必须是包装的pojo中的属性名.属性名
    直到最后的类型是简单类型即可,如下图,绑定的参数是
    包装类型QueryVo
    queryVo中的属性items,而items中的属性是name,price ... 所以请求参数名为items.name
    实体类:

    public class QueryVo {
        private Items items;
    
        // 封装List集合, 集合中元素为Items
        List<Items> itemsList;
        // ...
    }
    
    public class Items {
        private Integer id;
        private String name;
        private Double price;
        private String detail;
        private String pic;
        private Date createtime;
        // ...
    }
    
    image.png image.png

    解决中文乱码的过滤器

    <filter>
      <filter-name>CharacterEncodingFilter</filter-name>
      <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
      <init-param>
        <param-name>encoding</param-name>
        <param-value>utf-8</param-value>
      </init-param>
    </filter>
    <filter-mapping>
      <filter-name>CharacterEncodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    
    3. 自定义参数绑定

    需要我们自定义一个参数类型转换器 ,去实现springmvc提供的一个接口Converter<String, Date>

    /**
     * 将字符串转换成Date类型
     * Author menglanyingfei
     * Created on 2018.01.24 14:44
     */
    public class StringToDate implements Converter<String, Date> {
        @Override
        public Date convert(String s) {
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
            try {
                return format.parse(s);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    }
    

    然后还需要在处理器适配器中配置一个自定义参数绑定器:
    在springMVC.xml中配置:

    <!-- 配置注解形式的适配器和映射器
            conversion-service: 配置自定义参数绑定器
            validator: 引入一个校验器
        -->
        <mvc:annotation-driven conversion-service="conversionService"
            />
    
        <!-- 注册一个参数绑定器 -->
        <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
            <!-- 转换器 -->
            <property name="converters">
                <list>
                    <bean class="com.wtu.ssm.utils.StringToDate"/>
                </list>
            </property>
        </bean>
    

    Jsp页面:


    image.png
    4. 数组类型的参数绑定

    批量删除商品: 根据商品的id删除,多个商品的id,将多个id绑定到一个数组中:
    只需要请求参数名和controller方法中的形参的数组名一致即可。


    image.png image.png
    5. 集合类型的参数绑定

    批量修改商品信息:

    1. 批量查询商品, 然后将所有的商品显示在一个批量修改的页面。批量修改商品的页面可以直接采用ItemsList.jsp
    2. 提交批量修改商品


      image.png

    页面上的参数名该怎么定义?


    image.png

    此时在QueryVo中封装了itemsList集合:


    image.png

    完整代码地址

    https://github.com/menglanyingfei/SSMLearning/tree/master/SSM

    相关文章

      网友评论

        本文标题:SSM框架系列学习总结9之SpringMVC参数绑定

        本文链接:https://www.haomeiwen.com/subject/golnzxtx.html