Struts2 多条数据保存的实现

在企业开发过程中,经常会遇到多条数据,需要同时保存或者添加的问题,今天我们就来探讨下,在此,我仅仅抛砖引玉,希望大家积极发表自己的意见。
一) 前台字符串拼接,后台拆分
    这种方式是利用js遍历数据,并使用一个特殊符号,把每条拼接在一起,到后台再按照特定字符,先拆分出一条记录,再拆分出所有数据。不推荐种方法,所以在这里不叙述了
二) 前台使用一个名字,后台拆分
前台代码
<form action="index.action">
<input type="text" name="myTest" value="1"/>
<input type="text" name="myTest" value="2"/>
<input type="text" name="myTest" value="3"/>
<input type="text" name="myTest" value="4"/>
<input type="text" name="myTest" value="5"/>
<input type="submit">
</form>

后台代码
private String myTest;
public String getMyTest() {
	return myTest;
}
public void setMyTest(String myTest) {
	this.myTest = myTest;
}

数据格式
myTest = 1, 2, 3, 4, 5
再进行数据拆分就可以了
三) 使用jquery的JSON进行数据传输
1.先引入js
<script type="text/javascript" src="_public/js/json2.js"></script>
<script type="text/javascript" src="_public/js/jqeury-1.8.3.js"></script>

2.取得各个值,并生成json数组
html嵌入
			 var jsonArr = new Array();
			 $("input:checkbox:checked").each(function(i){
				 	if($(this).val()!="on"){
				 		jsonArr.push($(this).val());
				 	}
			 });
			 var params = JSON.stringify({
		    	"delingArr":jsonArr
		     });
			 var result = getJsonByAjaxArr(params,"houseDelete.action");
			 alert(result.executeMessage);

getJsonByAjaxArr函数
function getJsonByAjaxArr(param,actionName){
	var result;
	$.ajax({  
		url: actionName,    
		type: 'POST',
		async: false,//同步   只有success之后才会继续走
		contentType:"application/json",//没有这个,数组将不成功
		data: param,
		success: function(returnData, textStatus) {  
			result = returnData; 
		},    
		error: function(xhr, textStatus, errorThrown) {        
			alert("Data submit error");   
		}
	});
	return result;
}

3.添加拦截器
在Struts2中加入拦截器
<package name="jsonTilesSuper" extends="json-default">
	<result-types>
	<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
	</result-types>
<interceptors>
	<interceptor-stack name="myStack">
		<interceptor-ref name="json"/>
		<interceptor-ref name="defaultStack" />
	</interceptor-stack>
</interceptors>
	   <default-interceptor-ref name="myStack" />
	   <global-results>
	   	<result name="NOT_LOGIN" type="tiles">lodg.login</result>	
	   </global-results>
</package>

并加入包
struts2-json-plugin-2.3.7.jar
继承这个包的都有了JSON拦截的方法
4.后台
	private ArrayList<String> delingArr;
	
	public ArrayList<String> getDelingArr() {
		return delingArr;
	}
	public void setDelingArr(ArrayList<String> delingArr) {
		this.delingArr = delingArr;
	}

5前台
<#if result?exists && (result?size>0) >
	<#list result as current>
	<tr>
	<td><input type="checkbox" name="chk" id="chk" value="${current.lodging_id?if_exists}" /></td>
	<td>${current.lodging_catecd?if_exists}</td>
	<td>${current.lodging_group?if_exists}</td>
	<td>${current.lodging_unit?if_exists}</td>
	<td>${current.lodging_floor?if_exists}</td>
	<td>${current.lodging_ho?if_exists}</td>
	<td>${current.room_count?if_exists}</td>
	<td>${current.residence_number?if_exists}</td>
	<td>${current.area?if_exists}</td>
	<td>${current.lodging_type?if_exists}</td>
	<td>${current.rent_compnm?if_exists}</td>
	<td>${current.man_count?if_exists}</td>
	<td><a style="cursor: hand" id="houseEdtForm" onclick="houseEdtFormClick('${current.lodging_id?if_exists}','${current.residence_number?if_exists}','${current.comp_cd?if_exists}','${current.houseType_cd?if_exists}')"> 
	<img src="_public/images/ok.gif"> 修改</a>
	</td>
	</tr>
	</#list>
<#else>
	<tr>
	<td colspan=12 class="st">没有检索出数据!</td>
	</tr>
</#if>

注意:在编写这类代码的时候,一定注意传送到后台的是真正修改的数据,不要一股脑把全部数据都传送到后台

猜你喜欢

转载自8586.iteye.com/blog/1774086