接着上篇博客继续,我们的批量保存。
当我们使用了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")
@ResponseBody
- <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) {
-
- String ens = request.getParameter("entities");
-
-
- ens = ens.replace("}{", "},{");
- ens = "[" + ens.toString() + "]";</span></span>
- <span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-size:18px;"><span> </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给对了,那么一切就顺利成章了。
版权声明:本文为博主原创文章,未经博主允许不得转载。