天天看点

springmvc参数绑定-复杂绑定

包装类型pojo参数绑定 需求:用户查询Controller方法中实现用户名称查询条件传入 实现方式: 一:在形参中添加HttpServletRequest request 参数,通过request接收查询条件参数 二:在形参中让包装类型的pojo接收查询条件参数 分析: 页面传参的特点:复杂,多样性,条件包括:用户账号、商品编号、订单信息等等 如果将用户账号、商品编号、订单信息等放在简单pojo(属性是简单类型)中,pojo类属性比较多,比较乱 建议使用包装类型的pojo,pojo中的属性是pojo 实现: jsp页面:

<form action="${pageContext.request.contextPath }/user/queryUsers.action" method="post">
		<table>
			<tr>
				<td>名称:<input name="userCustom.name" />
					<input type="submit" value="提交" />
				</td>
			</tr>
	</form>
           

Controller:

@RequestMapping("/queryUsers")
	public String queryUsers(Model model, UsersQueryVo usersQueryVo) throws Exception {
		List<UserCustom> usersList = usersService.findUsersList(usersQueryVo);
		model.addAttribute("userList", usersList);
		return "user/user";
	}
           

注意:一定要考虑程序的可扩展性,多用包装类,应对多个pojo

数组类型绑定 需求:批量删除用户 实现方式:jsp多选框名称和形参名称保持一致 jsp页面:

<c:forEach items="${userList}" var="item">
		<tr>
			<td><input type="checkbox" name="user_id" value="${item.id }" /></td>
			<td>${item.name}</td>
		</tr>
</c:forEach>
           

Controller:

@RequestMapping("/deleteUsers")
	public String deleteUsers(Integer[] user_id) throws Exception {
		return "success";
	}
           

List集合类型绑定 需求:批量修改用户信息 实现方式: 1.查询包装类里添加集合属性,用于修改的信息传递到Controller 2.前端页面注意是按照集合索引的形式赋值 jsp页面:

<form name="form1"
		action="${pageContext.request.contextPath }/user/editAllUsersSubmit.action"
		method="post">
		<table>
			<tr>
				<td colspan="4"><input type="submit" value="批量修改" /></td>
			</tr>
			<tr>
				<td>name</td>
				<td>age</td>
				<td>address</td>
				<td>modifytime</td>
			</tr>
			<c:forEach items="${userList}" var="item" varStatus="status">
				<tr>
					<td><input name="userCustoms[${status.index}].name"
						value="${item.name}" /></td>
					<td><input name="userCustoms[${status.index}].age"
						value="${item.age}" /></td>
					<td><input name="userCustoms[${status.index}.address"
						value="${item.address}" /></td>
					<td><input name="userCustoms[${status.index}].modifytime"
						value='<fmt:formatDate value="${item.modifytime }"
							pattern="yyyy-MM-dd HH:mm:ss" />' /></td>
				</tr>
			</c:forEach>
		</table>
	</form>
           

Controller:

@RequestMapping("/editAllUsers")
	public String editAllUsers(Model model) throws Exception {
		List<UserCustom> usersList = usersService.findUsersList(null);
		model.addAttribute("userList", usersList);
		return "user/editAllUsers";
	}
	@RequestMapping("/editAllUsersSubmit")
	public String editAllUsersSubmit(UsersQueryVo usersQueryVo) throws Exception {
		return "success";
	}
           

pojo包装对象:

public class UsersQueryVo {
	private List<UserCustom> userCustoms;
	public List<UserCustom> getUserCustoms() {
		return userCustoms;
	}
	public void setUserCustoms(List<UserCustom> userCustoms) {
		this.userCustoms = userCustoms;
	}
}
           

Map类型绑定 在包装类中定义Map对象,并添加get/set方法,action使用包装对象接收。 jsp页面:

<tr>
<td>信息:</td>
<td>
姓名:<inputtype="text"name="itemInfo['name']"/>
年龄:<inputtype="text"name="itemInfo['age']"/>
.. .. ..
</td>
</tr>
           

Contrller:

public String useraddsubmit(Model model,QueryVo queryVo)throws Exception{
System.out.println(queryVo.getStudentinfo());
}
           

包装类中定义Map对象如下:

Public class QueryVo {
private Map<String, Object> itemInfo = new HashMap<String, Object>();
  //get/set方法..
}
           

继续阅读