概述
什么是参数绑定
从客户端请求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差不多,不过页面取值改成取出键的值就行了
参数绑定就写到这里了,按着套路走感觉不是很难,希望如此把
最后
以上就是真实早晨为你收集整理的参数绑定的全部内容,希望文章能够帮你解决参数绑定所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复