梦蓝樱飞(一点一滴, 记录个人成长之路)

时光荏苒,祝愿勿忘曾经的初心 && 活在当下,一定做好现在的事情

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

首先, 我总结复习之前的内容, 详细地介绍一下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

阅读更多
版权声明:本文为 梦蓝樱飞 原创文章,可以随意转载,但真诚希望在明确位置注明原文超链接的出处!!! 非常感谢! https://blog.csdn.net/menglanyingfei/article/details/79274855
个人分类: SSM
所属专栏: SSM框架系列学习总结
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭