最近項目中需要做一個關於批量刪除的功能,刪除條件有多個,需要從頁面全部傳給后台服務器程序,單個的刪除,可以拼接參數給url,服務器端獲取參數后執行刪除操作即可。但是批量刪除多個,參數會很多,傳遞就有些麻煩。當然有一種比較常見的解決方法,是使用逗號、下划線、或者分號分割,然后傳到后台拆分后再進行操作,這種方法需要前台拼接,后台解析,稍顯繁復且容易出錯。對於搞JAVA程序的我來說,顯得不是很面向對象。於是很自然的想到了使用json字符串進行傳遞數據,具體步驟如下:1、先把想要傳遞的參數封裝成js對象,代碼樣例如下:
-
var params = [];
-
var param = {};
-
param["aaa"] = "a";
-
param["bbb"] = true;
-
param["ccc"] = 2;
-
params.push(param);
2、接下來把js對象轉成json字符串,java培訓機構中比較常見的做法是使用JSON.stringfy(),嘗試一番之后發現IE8瀏覽器並不支持(該方法對谷歌、火狐、以及IE9以上版本瀏覽器完美支持),而我們當前的產品只支持IE瀏覽器,轉而求救谷歌百度,找到一個比較通用的js方法,代碼如下:
-
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();
-
}
-
}
3、前台封裝好以后,使用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);
4、通過內置方法轉化成集合,再傳遞到ibatis或者自己使用的數據庫持久層進行處理即可。