参数绑定

什么是参数绑定

从客户端请求key/value数据,经过参数绑定,将key/value数据绑定到controller方法的形参上。
springmvc中,接收页面提交的数据是通过方法形参来接收。而不是在controller类定义成员变更接收,简单来说就是把前端提交的数据封装到方法的形参上。

springMVC默认支持的绑定类型,例如我这一篇文章中的Controller返回值那里就是用第一个和第四个

在参数绑定过程中,如果遇到下边类型直接进行绑定,就是直接在方法的形参上定义

1.HttpServletRequest
通过request对象获取请求信息

2.HttpServletResponse
通过response处理响应信息

3.HttpSession
通过session对象得到session中存放的对象

4.Model/ModelMap
model是一个接口,modelMap是一个接口实现 。
作用:将model数据填充到request域。

如果是简单类型呢?其中的页面文件以及配置信息在这里

通过@RequestParam注解对简单类型的参数进行绑定。

1.如果不使用@RequestParam,要求request传入参数名称和controller方法的形参名称一致,方可绑定成功。
在这里插入图片描述
测试结果
在这里插入图片描述
点击第一个
在这里插入图片描述
点击第二个
在这里插入图片描述
如果传入的名字不一样会怎么样呢?
在这里插入图片描述
在这里插入图片描述
此时就要用到下面的注解了

2.如果使用@RequestParam,不用限制request传入参数名称和controller方法的形参名称一致。
在这里插入图片描述
发现是可以的
在这里插入图片描述
它还有一个作用,就是指定该参数必须进行绑定
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
它还可以指定默认值,就是当要求的参数没有传入时,就使用默认值
在这里插入图片描述
在这里插入图片描述
使用默认值的好处就是当前端没有传入数据时仍然可以做其它操作,例如用户没有指定查询条件时就默认查询某个条件,用户友好

如果是pojo类呢?

要求页面中input的name和controller的pojo形参中的属性名称一致,将页面中数据绑定到pojo。
例如我们上面的查询用户列表
pojo类是这样的
在这里插入图片描述
表单是这样的
在这里插入图片描述
此时我们去完善那个更新方法试试能不能将参数绑定成功,然后更新到数据库
在这里插入图片描述
测试结果
在这里插入图片描述
提交
在这里插入图片描述
在这里插入图片描述

我们可以看到上面的例子中。日期属性其实是没有绑定成功的,所以我们需要针对日期类型进行自定义绑定,利用springMVC提供的转换器即可

1.首先来定义我们的converter类
在这里插入图片描述
2.去配置文件配置自定义参数绑定组件
在这里插入图片描述
在这里插入图片描述3.最后就可以在页面格式化成我们想要的样子了
在这里插入图片描述
在这里插入图片描述
测试效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如果是包装类呢?(实现一个按用户名模糊查询)

第一种方法:在形参中 添加HttpServletRequest request参数,通过request接收查询条件参数,这个方法比较麻烦,不推荐使用。

第二种方法:在形参中传入包装类型作为查询条件参数。因为有时查询会很复杂,例如查询用户可能又要关联查询订单、订单详情等,如果使用简单的pojo类会麻烦。pojo的属性又多会很乱,建议使用包装类型的pojo,pojo中属性是pojo。

1.自定义用户扩展类
在这里插入图片描述
2.自定义一个包装类(生成加入属性的getter和setter方法)
在这里插入图片描述
3.按需编写mapper.xml文件
在这里插入图片描述
4.编写mapper接口
在这里插入图片描述
5.编写service
在这里插入图片描述
6.实现类(没有加入条件判断)
在这里插入图片描述
7.编写controller
在这里插入图片描述
8.编写jsp页面
用户列表页面
在这里插入图片描述
修改页面
在这里插入图片描述
9.部署测试
在这里插入图片描述
输入参数
在这里插入图片描述
提交
在这里插入图片描述
点击修改查看传入扩展类效果
在这里插入图片描述
选择其中字段进行修改
在这里插入图片描述
提交
在这里插入图片描述

集合—数组

在方法形参定义,和绑定pojo差不多,例如我们实现一个对用户列表的批量删除操作
编写controller

在这里插入图片描述
把用户列表页面作修改

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt"  prefix="fmt"%>
<html>
<head>
    <script type="text/javascript">
        function deleteUser() {
            document.UserForm.action="${pageContext.request.contextPath}/user/deleteUser.action";
            document.UserForm.submit();
        }
        function queryUser() {
            document.UserForm.action="${pageContext.request.contextPath}/user/findUserList.action";
            document.UserForm.submit();
        }
    </script>
    <title>查询用户列表</title>
</head>
<body>
<h1>用户表</h1>
<form name="UserForm" action="${pageContext.request.contextPath}/user/findUserList.action" method="post">
<table>
    <tr>
        <td>按名字条件查询</td>
            <td><input name="userList.username"></td>
            <td><input type="button" value="查询" onclick="queryUser()"/></td>
            <td><input type="button" value="批量删除" onclick="deleteUser()"/></td>
    </tr>
    <tr>
        <td>操作</td>
        <td>用户名</td>
        <td>性别</td>
        <td>生日</td>
        <td>地址</td>
    </tr>
    <c:forEach items="${userList}" var="user">
        <tr>
         <td><input type="checkbox" name="user_id" value="${user.id}"></td>
        <td>${user.username}</td>
        <td>${user.sex}</td>
        <td><fmt:formatDate value="${user.birthday}" pattern="yyyy-MM-dd"/></td>
        <td>${user.address}</td>
        <td><a href="${pageContext.request.contextPath}/user/editUser.action?id=${user.id}">修改</a></td>
        </tr>
    </c:forEach>
</table>
</form>
</body>
</html>

我们以debug方式测试一下看能不能获取数据
在这里插入图片描述
在这里插入图片描述
好现在可以编写service方法实现批量删除操作了,因为逆向工程中有根据id删除用户的,所以不用定义mapper.xml文件和mapper接口了
在这里插入图片描述
实现类,利用获取来的id数组遍历调用方法删除即可
在这里插入图片描述
部署测试效果
在这里插入图片描述
点击删除按钮
在这里插入图片描述
后台日志,还有4和5
在这里插入图片描述

集合—list集合

通常在需要批量提交数据时,将提交的数据绑定到list中,比如:成绩录入(录入多门课成绩,批量提交),本例子需求:批量用户修改,在页面输入多个商品信息,将多个商品信息提交到controller方法中。
1.在包装类上定义用户list集合属性
在这里插入图片描述
2.编写controller
首先要提供一个到修改页面的方法
在这里插入图片描述
然后写一个批量更新方法
在这里插入图片描述
3.编写jsp页面
在这里插入图片描述
4.采用dubug方式看数据是否绑定到方法形参上面
在这里插入图片描述
在这里插入图片描述

集合—Map集合

map集合同list差不多,不过页面取值改成取出键的值就行了

参数绑定就写到这里了,按着套路走感觉不是很难,希望如此把

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值