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

就是如上的一种效果。起初打算用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()%20%>/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()%20%>/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>@RequestMapping("MakeAdvisory_fit")
@ResponseBody
public 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处理。这种方法在我的那个项目中应用了很多次,也算是开阔的我的一种思路吧。今天将代码与解决方案分享处理,希望可以帮助到有类似困扰的朋友们,可以给一个解决思路。如果哪位朋友对类似问题有更好的解决办法,也请在博客下方留言,大家可以一起交流进步。
版权声明:本文为linux__xu原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。