接着上篇博客继续,我们的批量保存。
当我们使用了updaterow来更新了datagrid中的数据时,怎么获取到数据,这里我们不能使用便捷的getchanges ,只能绕一个道了,我们选择一个万无一失的方法,就是通过easyui的getRows来拿到datagrid中所有的数据行。
二、第二种———getRows
解决方案就是拿到datagrid中所有的数据,json的形式传递。
如何取得datagrid的行数:getRows, 转换成json :JSON.stringify("***");
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-size:18px;">//save all the dada from easyuiDatagrid function updateDatagrid(num) { var rows = $('#dg').datagrid('getRows'); var entities = "";</span></span>
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-size:18px;">// 循环 datagrid 中现有的数据,并且逐行复制给Entities ,并且转换成json格式</span></span>
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-size:18px;">// 在后台反序列话成对象的对象集合。 for(i = 0;i < rows.length;i++) { entities = entities + JSON.stringify(rows[i]); } $.ajax({ url: getRootPath()+'/labour/update.do', type: "post", async: true, dataType: 'json', data: {'entities': entities} success: function (data) { if(data.message=="操作成功!"){ alert(data.message); }else{ alert(data.message); return; } $('#dg').datagrid('reload'); } }); }</span></span>
后台的接收: 这里使用的解析json的工具是 net.sf.json。主要使用的是jsonarray 和jsonobject ,从字面上就可以看出:一个是负责数据/集合的,一个是负责单个对象的。这里我们要解析的是数组,所以使用的是jonsarray中的tocollection 方法,jsonarray还有很多其他方法,有兴趣的可以看看。
具体的代码如下:
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-size:18px;"> import net.sf.json.JSONArray; import net.sf.json.JSONObject;<span> </span></span><pre name="code" class="java"><span> @Override</span></span>@RequestMapping("update.do")
<span style="font-family:KaiTi_GB2312;font-size:18px;"></pre><pre name="code" class="java"></span>
<span style="font-family:KaiTi_GB2312;font-size:18px;"></pre><pre name="code" class="java"></span>
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-size:18px;"><span> </span>public String update(HttpServletRequest request) { //1、 get the detail data String ens = request.getParameter("entities"); // 2、format the string ens = ens.replace("}{", "},{"); ens = "[" + ens.toString() + "]";</span></span>
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-size:18px;"><span> </span>// 3. <span style="font-family: Arial, Helvetica, sans-serif;">transform to the object list</span> JSONArray array =JSONArray.fromObject(ens.toString()); @SuppressWarnings("unchecked") List<JobContentDetail> listDetail=(List<JobContentDetail>)JSONArray.toCollection(array, JobContentDetail.class); try { labourservice.saveData(listDetail); } catch (Exception e) { e.printStackTrace(); return createErrorMessage("操作失败!").toString(); } return createSuccessMessage("操作成功!").toString(); }</span></span>
三、使用心得
一边编辑,一边保存也好;先编辑,后批量保存也好,他们的解决方案都是一样的,因为easyui的datagrid (当然还有combobox)的接收数据类型是json ,所以,我们只要可以拿到前台显示的json数据,所有的东西就好解决了,从前台向后台传递,只要URL给对了,那么一切就顺利成章了。