1. 程式人生 > >如何實現將JS動態新增的TR中的值傳到後臺中並批量插入

如何實現將JS動態新增的TR中的值傳到後臺中並批量插入

在我的上一篇文章當中,已經在靜態頁面中實現了JS動態新增刪除TR。在實際工作中,更多的是需要將JS所新增的tr中的值儲存至資料庫中。下面我將介紹在SSH框架中如何實現這一功能需求。(以下均由我所做的實際專案給出功能程式碼)

在JSP中,JS程式碼會稍有變化。

 function addItem()
	    {
	    	var tr = document.getElementById("table_name").insertRow(3);
	    	
	    	for(var i = 0;i<7;i++){
	    		var td = "td"+i;
	    		td = tr.insertCell();
	  			td.width="13%";
	  			td.className = "edit_content_text";
	  			if(i==0){
	  				td.innerHTML = "<input type='text' name='item' />";
	  			}else if(i == 1){
	  				td.innerHTML = "<input type='text' name='desc_comm' />";
	  			}else if(i == 2){
	  				td.innerHTML = "<input type='text' name='pack' />";
	  			}else if(i == 3){
	  				td.innerHTML = "<input type='text' name='ctns' />";
	  			}else if(i == 4){
	  				td.innerHTML = "<input type='text' name='qty' />";
	  			}else if(i == 5){
	  				td.innerHTML = "<input type='text' name='us_lb' />";
	  			}else if(i == 6){
	  				td.innerHTML = "<input type='text' name='amount' />";
	  			}
	    	}
	    	
	    }

我用的是struts1,輸入框的程式碼是這樣寫的:

<html:text  property="item" styleClass="input_text" maxlength="20"/>
但是在新增tr中的程式碼只能用普通標籤,而不能用struts標籤,否則會報錯。具體原因我沒有深究,希望有知道的告知則個。

JS中的item、desc_comm等屬性的值並不需要再刻意賦值至form表單中,因為,這個addItem()本身就是在form表單中呼叫的,因此新新增的tr也就在form表單中。

在後臺接收的程式碼如下:

String[] item = request.getParameterValues("item");
		String[] desc_comm = request.getParameterValues("desc_comm");
		String[] pack = request.getParameterValues("pack");
		String[] ctns = request.getParameterValues("ctns");
		String[] qty = request.getParameterValues("qty");
		String[] us_lb = request.getParameterValues("us_lb");
		String[] amount = request.getParameterValues("amount");
因為同一個property會對應多個值,因此,接收的時候得用String陣列。這樣,使用一個for迴圈就可以將前臺的資料set至對應的屬性中就OK了。
int length = item.length;
		
		for(int j = 0;j<length;j++){
			//每迴圈一次就要重新new一個物件。不然,只會新增一條資料
			Item it = new Item();			
			it.setItem(item[j]);
			it.setDesc_comm(desc_comm[j]);
			it.setPack(pack[j]);
			it.setCtns(Integer.parseInt(ctns[j]));
			it.setQty(Integer.parseInt(qty[j]));
			it.setUs_lb(Integer.parseInt(us_lb[j]));
			it.setAmount(Integer.parseInt(amount[j]));
			it.setContract_id(contract_id);
			//呼叫Item的新增方法
			itemService.addItem(it);
			
		}
之前覺得這挺難的,後來發現其實也就這麼一回事。另外,我做的這個功能還涉及到多表插入以及多表查詢結果集顯示的問題。待我完善了再總結出來。