最近項目中須要作一個關於批量刪除的功能,刪除條件有多個,須要從頁面所有傳給後臺服務器程序,單個的刪除,能夠拼接參數給url,服務器端獲取參數後執行刪除操做便可。可是批量刪除多個,參數會不少,傳遞就有些麻煩。固然有一種比較常見的解決方法,是使用逗號、下劃線、或者分號分割,而後傳到後臺拆分後再進行操做,這種方法須要前臺拼接,後臺解析,稍顯繁複且容易出錯。對於搞JAVA程序的我來講,顯得不是很面向對象。因而很天然的想到了使用json字符串進行傳遞數據,具體步驟以下:一、先把想要傳遞的參數封裝成js對象,代碼樣例以下:java
var params = [];node
var param = {};ajax
param["aaa"] = "a";數據庫
param["bbb"] = true;json
param["ccc"] = 2;瀏覽器
params.push(param);服務器
二、接下來把js對象轉成json字符串,java培訓機構中比較常見的作法是使用JSON.stringfy(),嘗試一番以後發現IE8瀏覽器並不支持(該方法對谷歌、火狐、以及IE9以上版本瀏覽器完美支持),而咱們當前的產品只支持IE瀏覽器,轉而求救谷歌百度,找到一個比較通用的js方法,代碼以下:url
function obj2Str(obj) {對象
switch (typeof (obj)) {字符串
case 'object':
var ret = [];
if (obj instanceof Array) {
for (var i = 0, len = obj.length; i < len; i++)
{
ret.push(obj2Str(obj[i]));
}
return '[' + ret.join(',') + ']';
}
else if (obj instanceof RegExp)
{
return obj.toString();
}
else
{
for (var a in obj)
{
ret.push(a + ':' + obj2Str(obj[a]));
}
return '{' + ret.join(',') + '}';
}
case 'function':
return 'function() {}';
case 'number':
return obj.toString();
case 'string':
return '"' + obj.replace(/(\\|\")/g, '\\$1').replace(/\n|\r|\t/g, function (a)
{
return ('\n' == a) ? '\\n' : ('\r' == a) ? '\\r' : ('\t' == a) ? '\\t' : '';
}) + '"';
case 'boolean':
return obj.toString();
default:
return obj.toString();
}
}
三、前臺封裝好之後,使用ajax請求到後臺,JAVA解析json字符串的方法很多,能夠在網上找寫好的方法,固然也可使用json-lib-xxx.jar,這個jar包在項目中應用很普遍,LZ上一家公司就使用其作了大量json轉化工做,使用方法以下:
JSONArray jsonArray = JSONArray.fromObject(jsonStr);
List<Map> cmdList = (List<Map>)JSONArray.toCollection(jsonArray, Map.class);
四、經過內置方法轉化成集合,再傳遞到ibatis或者本身使用的數據庫持久層進行處理便可。