springMVC复杂参数绑定-数组
读完本篇你可以学到:
- springMVC前台是如何向后台传递数组参数,以及后台是如何接收参数的.
- 简单提到了 页面中时间类型如何格式化(用到了jsp的标签库fmt)
- 前台页面以列表方式展示后台传递过来的集合
前边有了简单的参数绑定, 但是在实际使用中并不能满很好则业务需求, 就比如页面上有个列表一类的,想做个批量的删除,这个时候简单绑定就显得心有余而力不足了.
这个时候就要使用数组或者集合来向后台传递参数了
写个小栗子来说明问题:
1. jsp页面部分
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<form action="${pageContext.request.contextPath }/getArray.action" method="post">
查询条件:
<table width="100%" border=1>
<tr>
<td>id<input type="text" name="user.id" /></td>
<td>员工姓名<input type="text" name="user.name" /></td>
<td><input type="submit" value="查询"/></td>
</tr>
</table>
员工列表:
<table width="100%" border=1>
<tr>
<td>选择</td>
<td>姓名</td>
<td>性别</td>
<td>时间</td>
<td>操作</td>
</tr>
<c:forEach items="${userList }" var="u">
<tr>
<td><input type="checkbox" name="arrayId" value="${u.id}"/></td>
<td>${u.name }</td>
<td>${u.sex }</td>
<td><fmt:formatDate value="${u.time}" pattern="yyyy-MM-dd HH:mm:sss"/></td>
<td><a href="${pageContext.request.contextPath }/userEdit.action?id=">修改</a></td>
</tr>
</c:forEach>
</table>
<input type="submit" value = "提交">
</form>
</body>
</html>
简单扩展下时间利用jsp的fmt标签库格式化输出:
// 第一步 引入jsp的fmt标签库
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
// 中间的略...
// 格式化输出
<td><fmt:formatDate value="${u.time}" pattern="yyyy/MM/dd HH:mm:sss"/></td>
注: 1. 这里的年月日以及时分秒之间放入连接符可以换成其他的比如 “-”
2. 使用jstl 的时候不要忘了导入jstl核心库.
显示效果如下 :
2. 页面填充数据
这了为了方便直接造的数据, 没有走数据库
@RequestMapping(value = "/demoList.action")
public String demoList(HttpServletRequest request,HttpServletResponse response,ModelMap modelMap) {
List<User> userList = new ArrayList<User>();
User u1 = new User();
u1.setId(1);
u1.setName("老大");
u1.setSex("男");
u1.setTime(new Date());
userList.add(u1);
User u2 = new User();
u2.setId(2);
u2.setName("老二");
u2.setSex("女");
u2.setTime(new Date());
userList.add(u2);
User u3 = new User();
u3.setId(3);
u3.setName("老三");
u3.setSex("男");
u3.setTime(new Date());
userList.add(u3);
modelMap.addAttribute("userList",userList);
return "listInfo";
}
3.页面提交的controller
页面点击提交后的处理方法:
这里仅仅做到能显示前台传递过来的参数信息的效果即可.
@RequestMapping(value = "/getArray.action")
public String getArray(ArrayVo vo, Integer[] arrayId, HttpServletRequest request,HttpServletResponse response,ModelMap modelMap) {
System.out.println("包装类获取请求参数数组:"+vo.getArrayId().length);
for (Integer string : arrayId) {
System.out.println("直接获取请求参数数组: "+string);
}
return "success";
}
这里使用了两种方式获取了数组参数 , 需要注意的是 用ArrayVo对象的方式接收数组,属性名要同页面的name值相同
4. 包装类ArrayVo
public class ArrayVo {
//属性名要同页面的name值相同
private Integer[] arrayId;
public Integer[] getArrayId() {
return arrayId;
}
public void setArrayId(Integer[] arrayId) {
this.arrayId = arrayId;
}
}
5. 页面提交效果
页面上选中3个复选框点击提交,后台显示如下
Controller方法中可以用Integer[]接收,或者pojo的Integer[]属性接收。这里示例两种方式一起使用了,实际中两种方式任选其一即可.