一般从前台传数据到后台都是单个对象的,(增删改查).但有时需要批量修改或者添加时就要传输多个对象的值
你会发现传不过去,在参数列表中显示Undefined,这就尴尬了! 注:我用了post请求(可见下面的代码)
思路:
1.将数据(json对象数组)取到后转后成字符串.字符串是能被发送的
2.在jsp中接受数据(字符串)
3.从json字符串转换 json对象集合
4.得到集合就能取到单个对象了
js代码:
// 提交考勤情况
function submitSignIn() {
var params = $('#signInTable').datagrid("getRows");//得到json对象(取到数据表格中所有行的数据)
alert(JSON.stringify(params));//将其转成字符串并弹框显示
$.post("signIn/addSign", "val="+JSON.stringify(params), function(data) {
var str = "";
if (data.trim() == "true") {
str = '添加考勤成功!!';
} else {
str = '添加考勤失败!!';
}
$.messager.show({
title : '提示消息',
msg : str,
showType : 'show',
});
}, "json");
}
jsp代码:
private void doAddSign(HttpServletRequest request, HttpServletResponse response) throws IOException {
String val=request.getParameter("val");
Gson gson=new Gson();
java.lang.reflect.Type t=new TypeToken<List<SignInInfo>>(){}.getType();//复杂类型的转换
List<SignInInfo> users = gson.fromJson(val, t);//将对象转化成集合
for (SignInInfo staff : users) {
System.out.print(staff.getStaffId());
System.out.print(staff.getStaffName());
System.out.print(staff.getStaffJob());
System.out.println(staff.getStaffTime());
}
//也可以通过字符串的截取,但是这又麻烦又笨
// String regex="\\{([^)]*?)\\}";//这个表达式能截取{}中的内容
// Pattern p=Pattern.compile(regex);
// Matcher m=p.matcher(val);
// while(m.find()){
System.out.println(m.group());
// }
respOutStr(response, doJsonStr(true + ""));//我自己封装的方法,作用是输出到界面
}
注:需要用到一个jar包---gson包 点击下载