json jquery servlet配合使用的总结
这几天项目中用到了json,大概做了下总结.
jquery做前台 使用json 搭配servlet基本分为两种模式:
1。 基本的键值对
这个最常用,jquery的ajax几乎每种都用到.
比如:
//级联库位代码
$("#lgort").load("lgort.do?method=getLgortByBukrs",
{"bukrs":bukrs});
对应的servlet:
String bukrs = request.getParameter("bukrs");
$.post(
"mard.do?method=getMard4Out",
{matnr:matnr,lgort:lgort,lfimg:lfimg,curDeliveryNr:curDeliveryNr},
function(data){
var html ='';
$.each(data, function(k,v){ html += '<tr>' ;
html += '<td> <span id="lgort">' + v.lgort+'</span></td>';
html += '<td> <input type="text" name="lagpcode" id="lagpcode" readonly value="'+v.lagpcode+ '"'+ ' class="input_noteidt3" /></td>';
html += '<td><span id="mantnr">' + v.matnr+'</span></td>'; html += '<td> <input type="text" name="batchCode" id="batchCode" readonly value="'+v.batchcode+ '"'+ ' class="input_noteidt3" /></td>'; html += '<td> <input type="text" name="menge" id="menge" readonly value="'+v.labst+ '"'
+ ' class="input_noteidt3" /></td>';
html += '<td> <input type="text" name="meins" id="meins" readonly value="'+v.meins+ '"'
+ ' class="input_noteidt3" /></td>';
html += '<td><span id="budate">' + v.budate+'</span></td>';
html += '<td>'+'<input type="radio" name="radio" id="radio" value="'+v.mardid+'"/> </td>';
html += '</tr>' ;
}
);
$("#messageTab").append(html);
},"json"
);
对应的后台代码:
//获取传入的物料号和库位
String matnr = request.getParameter("matnr");
String lgort = request.getParameter("lgort");
String lfimg = request.getParameter("lfimg");
第二种方式: 传递一个数组:
这种方式又分两种情况
(1) 一个值类型的数组 如[1],['2']之类
//保存行项目数量拆分
$("#saveSelect").click(function(){
if(unCompleteCount>0){
alert('有新增行尚未保存,请先执行保存操作!!');
return
}
if($("#messageTab tr:gt(0)").length<1){
alert('没有项目可以录入!');
return;
}
//创建一个数组 保存当前外向交货单号行项目对应的mardid
// 第一行为 当前外向交货单号|行项目号
var mards = new Array();
mards.push(curDeliveryNr);
$("#messageTab tr:gt(0)").each(function(index, element) {
var mardid = trim($(this).find(":radio").val());
mards.push(mardid);
});
$.post("mard.do?method=getDataByJson",{mards:mards}, function(){
}
);
//关闭层
$("#mybg").hide();
$("#message_box").hide();
//把拆分的数量保存起来
itemCount += (mards.length -1);
alert('行项目数量拆分成功!');
});
后台代码如下:
//这里是mards[],不是mards
String[] mards = request.getParameterValues("mards[]");
if(mards !=null &&mards.length >0){
//第一个元素是外向交货单号+行项目号
String key = mards[0];
List<String> ids = new ArrayList<String>();
for(int i=1;i<mards.length;i++){
ids.add(mards[i]);
//System.out.println(mards[i]);
}
if(outMardMap == null){
outMardMap = new HashMap<String, List<String>>();
}
//强制覆盖旧的配对关系
outMardMap.put(key, ids);
}else{
throw new Exception("获取行项目对应的mardid失败!");
}
(2) object数组回传
前台$("#messageTab tr:gt(0)").each(function(index, element) {
var trItem = new Object();
var vbeln = $(this).find("#vbeln").val()
var ebelp = $(this).find("#ebelp").val()
var barcode = $(this).find("#barcode").val();
var matnr = $(this).find("#matnr").val();
var batchCode = $(this).find("#batchCode").val();
var menge = $(this).find("#menge").val();
var meins = $(this).find("#meins").val(); lagpcode
var lagpcode = $(this).find("#lagpcode").val();
//为弹出层的form指定lgort值 bukrsForm
var lgort = trim($("#lgort").html());
var bukrs =trim($("#bukrs").html());
trItem.lgort = lgort;
trItem.bukrs = bukrs;
trItem.vbeln = vbeln;
trItem.ebelp = ebelp;
trItem.barcode=barcode;
trItem.matnr=matnr;
trItem.batchCode=batchCode;
trItem.menge=menge;
trItem.meins=meins;
trItem.lagpcode=lagpcode;
tbData.push(trItem);
});
//alert(tbData.length);
//alert(tbData[0]['barcode']);
var jsonData = JSON.stringify(tbData);
alert(jsonData);
$.post('tr.do?method=Save2PoCache',{jsonData:jsonData},
function(){
},'json'
);
后台:
String jsonData = request.getParameter("jsonData");
/*
*因为前台是[{},{}]的形式,所以此处用JSONArray接收,如果是{'users':[{},{}]} 则用JSONObject接收 */
JSONArray ja = JSONArray.fromObject(jsonData);
for(Object o:ja){
JSONObject jo =(JSONObject)o;
if(ebelp==""){
ebelp = jo.getString("ebelp");
}
if(vbeln==""){
vbeln = jo.getString("vbeln");
}
TRItem item = new TRItem();
item.setTriid(uuid.GeneratePK());
//暂不设置TRHId
item.setTrhid("");
item.setBarcode(jo.getString("barcode"));
item.setMatnr(jo.getString("matnr"));
item.setBukrs(jo.getString("bukrs"));
item.setLgort(jo.getString("lgort"));
item.setLagpcode(jo.getString("lagpcode"));
item.setTypeid("lgtype001");
item.setBatchcode(jo.getString("batchCode"));
item.setMenge(jo.getString("menge"));
item.setMeins(jo.getString("meins"));
item.setShkzg("");
item.setDelflag("");
item.setTranstate("");
item.setCurlineno(ebelp);
trItems.add(item);
}
<
持续学习、持续收获才能带来持续的满足和快乐!
浙公网安备 33010602011771号