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);
		}


<
posted on 2012-08-07 09:15  babyblue  阅读(256)  评论(0)    收藏  举报