JavaWEB前端向服務器端發送對象

最近項目中須要作一個關於批量刪除的功能,刪除條件有多個,須要從頁面所有傳給後臺服務器程序,單個的刪除,能夠拼接參數給url,服務器端獲取參數後執行刪除操做便可。可是批量刪除多個,參數會不少,傳遞就有些麻煩。固然有一種比較常見的解決方法,是使用逗號、下劃線、或者分號分割,而後傳到後臺拆分後再進行操做,這種方法須要前臺拼接,後臺解析,稍顯繁複且容易出錯。對於搞JAVA程序的我來講,顯得不是很面向對象。因而很天然的想到了使用json字符串進行傳遞數據,具體步驟以下:一、先把想要傳遞的參數封裝成js對象,代碼樣例以下:java

  1. var params = [];node

  2. var param = {};ajax

  3. param["aaa"] = "a";數據庫

  4. param["bbb"] = true;json

  5. param["ccc"] = 2;瀏覽器

  6. params.push(param);服務器

  二、接下來把js對象轉成json字符串,java培訓機構中比較常見的作法是使用JSON.stringfy(),嘗試一番以後發現IE8瀏覽器並不支持(該方法對谷歌、火狐、以及IE9以上版本瀏覽器完美支持),而咱們當前的產品只支持IE瀏覽器,轉而求救谷歌百度,找到一個比較通用的js方法,代碼以下:url

  1. function obj2Str(obj) {對象

  2. switch (typeof (obj)) {字符串

  3. case 'object':

  4. var ret = [];

  5. if (obj instanceof Array) {

  6. for (var i = 0, len = obj.length; i < len; i++)

  7. {

  8. ret.push(obj2Str(obj[i]));

  9. }

  10. return '[' + ret.join(',') + ']';

  11. }

  12. else if (obj instanceof RegExp)

  13. {

  14. return obj.toString();

  15. }

  16. else

  17. {

  18. for (var a in obj)

  19. {

  20. ret.push(a + ':' + obj2Str(obj[a]));

  21. }

  22. return '{' + ret.join(',') + '}';

  23. }

  24. case 'function':

  25. return 'function() {}';

  26. case 'number':

  27. return obj.toString();

  28. case 'string':

  29. return '"' + obj.replace(/(\\|\")/g, '\\$1').replace(/\n|\r|\t/g, function (a)

  30. {

  31. return ('\n' == a) ? '\\n' : ('\r' == a) ? '\\r' : ('\t' == a) ? '\\t' : '';

  32. }) + '"';

  33. case 'boolean':

  34. return obj.toString();

  35. default:

  36. return obj.toString();

  37. }

  38. }

  三、前臺封裝好之後,使用ajax請求到後臺,JAVA解析json字符串的方法很多,能夠在網上找寫好的方法,固然也可使用json-lib-xxx.jar,這個jar包在項目中應用很普遍,LZ上一家公司就使用其作了大量json轉化工做,使用方法以下:

  1. JSONArray jsonArray = JSONArray.fromObject(jsonStr);

  2. List<Map> cmdList = (List<Map>)JSONArray.toCollection(jsonArray, Map.class);

  四、經過內置方法轉化成集合,再傳遞到ibatis或者本身使用的數據庫持久層進行處理便可。

相關文章
相關標籤/搜索