客户端ajax的多个相同属性名的json格式封装

前提

在页面对checkedbox为true的用户,进行批量删除

页面通过<input>标签的name属性和id属性传递用户名和用户id

content+='  <td><input type="checkbox" name="'+n.loginacct+'" id="'+n.id+'"></td>';

 

 封装多个相同属性名的json数据

1.先定义一个变量jsonObj

2.通过下面语句得到被勾选的checkbox的集合,即被删除的用户集合

var selectCheckbox = $("tbody tr td input:checked");

 

 3.通过遍历,得到,每个用户的id和loginacct属性值,这里可以把jsonObj看作是一个数组集合

注意:datas的名称必须与服务器端相关的Controller方法参数类型的字段一致

	var jsonObj = {};
            	
            	$.each(selectCheckbox,function(i,n){
            		jsonObj["datas["+i+"].id"] = n.id;
            		jsonObj["datas["+i+"].loginacct"] = n.name;
            	});
            		 

封装后的json参数,datas代表Controller接受的参数类型所具有的属性,[X]代表是否封装到同一个对象,.id代表datas属性里必须带有id属性

datas[0].id = XX
datas[0].loginacct = XX

datas[1].id = XX
datas[1].loginacct = XX

 

 

 4.相对应的Controller方法,其中Data参数类型必须有datas属性

@ResponseBody
		@RequestMapping("/doDeleteBatch")
		public Object doDeleteBatch(Data data) {

			AjaxResult result = new AjaxResult();
			try {
				int count = userService.deleteBatchUserByVo(data);
				result.setSuccess(count==data.getDatas().size());
				
			} catch (Exception e) {
				e.printStackTrace();
				result.setSuccess(false);
				result.setMessage("删除数据失败");				
			}
			return result;
		}

 

5.Data类里面必须有datas属性

public class Data {

	private List<User> userList = new ArrayList<User>();
	private List<User> datas = new ArrayList<User>();

	private List<Integer> ids;

	private List<MemberCert> certimgs = new ArrayList<MemberCert>();

 

6.略过Controller成和Service层

Dao层的mapper方法,传入的是Data类型

int deleteBatchUserByVo(Data data);

 7.对应的的mybatis方法,collection可以写Data的datas集合属性,框架能够通过属性名进行查找遍历datas集合,得到每个user对象

 

<delete id="deleteBatchUserByVo">
		delete from t_user where id in
		<foreach collection="datas" open="(" close=")" separator="," item="user">
			#{user.id}
		</foreach>
	</delete>

 

---------------------------------------------------------------------------------------------

当业务层传入的不是data对象,而是data对象里面的集合

@Override
	public int deleteBatchUserByVo(Data data) {		
		return userMapper.deleteBatchUserByVo(data.getDatas());
	}

 Dao方法参数类型也变成List集合

int deleteBatchUserByVo(List<User> userList);

 这时候mybatis的配置语句的collection就不能写成userList了,必须写成固定参数list(官方文档写明)

<!-- 如果mapper接口参数类型为Collection集合,那么,可以使用list来获取这个集合参数 -->
 <!-- 如果mapper接口参数类型为Array集数组,那么,可以使用array来获取这个数组参数 -->
 	<delete id="deleteBatchUserByVo">
		delete from t_user where id in
		<foreach collection="list" open="(" close=")" separator="," item="user">
			#{user.id}
		</foreach>
	</delete>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章