前台将数据存入集合并封装为JSON格式,后台用list遍历输入

来源:互联网 发布:win7开机时间优化 编辑:程序博客网 时间:2024/05/21 09:33

在开发项目时,在前台的数据获取时遇到了一个不大不小的问题。根据公司的业务需求,是要实现一个类似上级选中和下级选中要一一对应的一种效果。

   

就是如上的一种效果。起初打算用Map的键值对的操作实现,但发现这种方案在前台取值好获取,但后台用mybatis时foreach方法不好录入,比较麻烦后来请教了一些朋友之后,决定在前台取值用,将数据保存到数组中,然后封装为JSON类型,后台直接用List进行处理就可以了。很方便。

现将前后台代码摘录如下:

前台jsp代码:

<script>$(function(){//表单提交$("#commit").click(function(){var slist = new Array();//这是在前台创建一个数组类型$("span[name='space']").each(function(){/* alert("空间名称为\t"+$(this).text()); *///获取所有的空间编号var space_fit = {};//这里为创建实体类,必须是java对应存在的实体类,且有相应的属性。将这个实体类封装到数组中,然后转换为JSON格式的数据space_fit.cus_code=$("#cus_code").val();space_fit.addr_code=$("#addr_code").val();space_fit.space_name= $(this).text();var product = "";$("input[name='product,"+$(this).attr("id")+"']:checked").each(function(){/* alert("选中的部件信息为\t"+$(this).val()); */ //在空间的循环下获取部件[上一个this为空间,下一个this为部件,二者范围不同,不干扰]product += $(this).val()+",";})product = product.substring(0, product.length-1);space_fit.advice = product;slist.push(space_fit);})var fitList = JSON.stringify(slist); //此处为调用前台方法,将数组转换为JSON格式,方便传值和后台接收/* alert(fitList); return; */$.ajax({url:"MakeAdvisory_fit.action",type:"post",dataType:"json",data:{"fitList":fitList},success:function(data){if(data){alert("配置建议信息录入成功!");location.href="<%=request.getContextPath() %>/customer/toCustomer_addrZX.action?cus_code="+$("#cus_code").val()+"&cus_name="+encodeURI(encodeURI($("#cus_name").text()));}else{alert("填入信息有误,请重新核实");location.reload();}}})})//清空表单$("#clear").click(function(){$('#fit').form('clear');})//返回$("#back").click(function(){location.href="<%=request.getContextPath() %>/work/toWork.action?cus_code="+$("#cus_code").val();})})</script></head><body><div class="easyui-panel" title="适老化改造部品配置建议表测试表" style="width:100%;" ><form id="fit" method="post"><div style="margin-bottom:20px"><div>客户姓名:<input type="hidden" value="${bs.cus_code }" id="cus_code" name="cus_code"><span id="cus_name">${cus_name}</span></div></div><div style="margin-bottom:20px"><div>客户地址:<input type="hidden" value="${bs.addr_code }" id="addr_code" name="addr_code"><span id="address">${bs.address }</span></div></div><div style="margin-bottom:20px"><div>配置建议</div><c:forEach var="space" items="${sList }"><div style="margin-left: 50px"><span id="${space.space_id }" name="space">${space.space_name }</span></div><div style="margin-left: 100px"><c:forEach var="p" items="${pList }">${p.product_name }<input type="checkbox" value="${p.product_name }" name="product,${space.space_id}"></c:forEach></div></c:forEach></div><div style="margin-bottom:20px"><input type="button" value="保存" id="commit"><input type="button" value="返回" id="back"><input type="button" value="清空" id="clear"></div></form></div></body></html>


java后台接收代码:

@RequestMapping("MakeAdvisory_fit")@ResponseBodypublic boolean MakeAdvisory_fit(String fitList){//后台直接用字符串类型接收即可ObjectMapper objectMapper = new ObjectMapper();JavaType javaType = objectMapper.getTypeFactory().constructParametricType(List.class, Space_fit.class);List<Space_fit> list = null;try {list = objectMapper.readValue(fitList, javaType);//将传来的JSON数据转换为需要的集合数据int i = makeAdvisoryService.addFit(list);//传入后台时,只需要传入list集合即可if(i>0){return true;}else{return false;}} catch (IOException e) {e.printStackTrace();return false;}}
java存储值的实体类:

public class Space_fit {private String cus_code;private String addr_code;private String space_name;private String advice;private String cus_name;private String address;//省略set/get方法}

mybatis将数据录入数据库中:

<insert id="addFit" parameterType="java.util.List">insert into space_advice (cus_code,addr_code,space_name,advice) values<foreach collection="list" item="fit" separator="," index="index"> (#{fit.cus_code},#{fit.addr_code},#{fit.space_name},#{fit.advice} )</foreach></insert>

在前台将数据封装进数组,后台用list处理。这种方法在我的那个项目中应用了很多次,也算是开阔的我的一种思路吧。今天将代码与解决方案分享处理,希望可以帮助到有类似困扰的朋友们,可以给一个解决思路。如果哪位朋友对类似问题有更好的解决办法,也请在博客下方留言,大家可以一起交流进步。





阅读全文
0 1
原创粉丝点击