最近项目的特殊性可算是把我折腾得够呛,从最开始的整站JS,到现在的Liferay,且不说后台,单单前台框架就让我从Dojo到YUI又到AUI、jQuery、ExtJS,常用API翻了一遍,常见问题解决了一遍,而归根结底,为的就是一个方便好用、加载迅速的Grid控件。还好目前是定准用ExtJS了,不然常用控件都用一遍也没找到完全合适的,就困难了。题外话至此,下面开始正题。

刚刚看到同学在之前发的文章,在使用Easyui DataGrid时遇到新增行数据在保存时不能获取的问题,解决方法是在保存时先执行$('#example′).datagrid('acceptChanges');然后前台获取全部行,再拼装字符串传到后台,这样做是可以解决,但实际上Easyui Datagrid似乎有更好的API供调用。为了和我一样的新手少走弯路,故写此篇文章以便参考。

例子如下:

easyloader.locale = "zh_CN";

easyloader.theme = "gray";

using(['datagrid'], function () {

//new Datagrid的代码写在这里,下面是Datagrid中相应按钮调用的方法,是根据官方demo复制过来的。这里推荐使用easyloader,因为他是easyui实现的动态加载模块,个人认为会比一个个引入好点。

});

var editIndex = undefined;//标示当前编辑行,提高效率,避免使用each遍历所有行来关闭正在编辑的行。

function endEditing(){

if (editIndex == undefined){return true;}

if ($('#example').datagrid('validateRow', editIndex)){

var ed = $('#example').datagrid('getEditor', {index:editIndex,field:'productid'});

var productname = $(ed.target).combobox('getText');

$('#example').datagrid('getRows')[editIndex]['productname'] = productname;

$('#example').datagrid('endEdit', editIndex);

editIndex = undefined;

return true;

} else {

return false;

}

}

function onClickRow(index){

if (editIndex != index){

if (endEditing()){

$('#example').datagrid('selectRow', index).datagrid('beginEdit', index);

editIndex = index;

} else {

$('#example').datagrid('selectRow', editIndex);

}

}

}

function append(){

if (endEditing()){

$('#example').datagrid('appendRow',{status:'P'});

editIndex = $('#example').datagrid('getRows').length-1;

$('#example').datagrid('selectRow', editIndex).datagrid('beginEdit', editIndex);

}

}

function remove(){

if (editIndex == undefined){return}

$('#example').datagrid('cancelEdit', editIndex).datagrid('deleteRow', editIndex);

editIndex = undefined;

}

function accept(){

if (endEditing()){

var inserted = $dg.datagrid('getChanges', "inserted");

var deleted = $dg.datagrid('getChanges', "deleted");

var updated = $dg.datagrid('getChanges', "updated");

var effectRow = new Object();

if (inserted.length) {

effectRow["inserted"] = JSON.stringify(inserted);

}

if (deleted.length) {

effectRow["deleted"] = JSON.stringify(deleted);

}

if (updated.length) {

effectRow["updated"] = JSON.stringify(updated);

}

$.post("commit", effectRow, function(response) {

if(response.status){

$("#example").datagrid('acceptChanges');

}

}, "JSON");

}

}

function reject(){

$('#example').datagrid('rejectChanges');

editIndex = undefined;

}

function getChanges(){

var rows = $('#example').datagrid('getChanges');

console.log(rows);

}

如上所示,在保存时,其实可以根据新增、修改、删除,三种状态来区分具体数据,而在保存之前需要调用endEdit,所以文章一开始说的问题就很明显了,不是直接acceptChanges而是要先endEdit,之后就能拿到新插入的数据了。而提交的时候可以使用JSON.stringify(object);得到json字符串后提交,后面就是使用ajax请求传递字串给后台了。这里要说一下,使用这个JSON.stringify的时候,我在IE下面有点问题,不知道是不是我使用easyloader的问题,时间关系,我没深究,因为我们使用的Liferay本身集成有AUI(其实就是YUI的扩展),我就直接调用A.JSON.stringify了,如果大家在使用的时候有遇到问题,可以找其他object to json的转换方式,同时也欢迎大家转告给我,以便整理出更简明、完善的例子。

下面简单说明一下后台获取方式,因为前台提交时用的是对象,里面最多也就三个元素,分别为inserted、deleted、updated,所以在后台直接通过request直接get就能得到String型的json数组。我的方式是把数组直接转换为List>转换的话就是要json.simple的JSONParser。如果需要直接转换bean或者其他的话可以根据自己的思路转换,这里只说明自己的简单实现。毕竟现在不用了,没研究那么多。

Easyui Datagrid增删改及后台交互(java)

微信打赏

支付宝打赏

easyui框架前后端交互_Easyui Datagrid增删改及后台交互(java)相关推荐

  1. datagrid java_Easyui Datagrid增删改及后台交互(java)

    最近项目的特殊性可算是把我折腾得够呛,从最开始的整站JS,到现在的Liferay,且不说后台,单单前台框架就让我从Dojo到YUI又到AUI.jQuery.ExtJS,常用API翻了一遍,常见问题解决 ...

  2. easyui框架前后端交互_Vue+ElementUI+.netcore前后端分离框架开发项目实战

    点击上方"前端教程",选择"星标" 每天前端开发干货第一时间送达! 转自:我心依旧.cnblogs.com/-clouds/p/11633786.html 框架 ...

  3. easyui框架前后端交互_easyui前后端分离

    陈旧的开发模式 美工(ui工程师:出一个项目模型) 前端工程师做html页面 java工程师:将原有的html转成jsp,动态展示数据 前后端强依赖,后端必须要等前端的html做好才能套jsp.如果h ...

  4. php增删改查前后端分离,前后端分离之前端增删改查

    初次接触前后端分离,现把前端一个例子放出来记录以下,不喜勿喷. html静态页面代码: 菜单管理平台数据... 菜单管理查询条件列表 菜单名称: 菜单父级: 菜单名称: 菜单级别: 菜单父级: 图片地 ...

  5. ajax配合ssm框架,SSM框架前后端信息交互实现流程详解

    SSM框架前后端信息交互实现流程详解 比如该处代码,显示了问题的标题信息,并将其作为超链接,点击该链接时进入后端Controller类的方法,并向其发送问题编号question_id 3.ajax请求 ...

  6. 推荐一些基于vue.js的uni-app框架前后端分离的一些毕设项目

    一些基于vue.js的uni-app框架前后端分离的一些项目 下面这些课题都可以作为基于vue的前后端分类的毕设项目 下面的这些项目都可以演示的是微信小程序 下面的这些项目都可以转成h5项目 下面的这 ...

  7. php前后端分离的框架,如何使用CI框架实现框架前后端分离

    这篇文章主要介绍了CI框架实现框架前后端分离的方法,结合实例形式较为详细的分析了CI框架前后端分离的相关视图.控制器设置与扩展等操作技巧,需要的朋友可以参考下 本文实例分析了CI框架实现框架前后端分离 ...

  8. B站云E办Vue+SpringBoot前后端分离项目——MVC三层架构搭建后台项目

    本项目来源B站云E办,笔记整理了项目搭建的过程和涉及的知识点.对于学习来说,不是复制粘贴代码即可,要知其然知其所以然.希望我的笔记能为大家提供思路,也欢迎各位伙伴的指正. 项目前端学习笔记目录 B站云 ...

  9. 基于Python Flask框架+jquery Ajax技术实现的增删改查(CRUD)+Ajax的异步文件上传

    运行界面(话不多说先上图) 运行之后的index界面,有登陆.注册功能 登陆界面,输入数据库中用户名.密码不为空且密码是加密的数据,进入main界面 注册界面,用的bootstrop的弹窗,用户名和密 ...

最新文章

  1. springboot基本属性注入
  2. Java基础之String,StringBuilder,StringBuffer三者的区别
  3. 分享实录|争议不断地EOS,我们如何才能理性看待?
  4. oracle dba create view 失败 解决办法
  5. js中的null VS undefined
  6. 扩展欧几里得算法的讲解
  7. python实列pdf下载_Python程序实例解析.pdf
  8. 三种视觉自动化检测的解决方案
  9. 团队管理之—— 定目标:让你的方向与公司的方向保持一致
  10. 利用Java程序统计彩票双色球中一等奖究竟有多难
  11. python机器学习实现oneR算法 以鸢尾data为例
  12. Java基础之猫抓老鼠(继承)
  13. 面试题promise原理
  14. 关于'//![cdata['和 '//]]'解答
  15. 全球及中国足病鞋垫行业销售情况及营销渠道策略报告(2022-2027年)
  16. 配置Discuz论坛教程
  17. [Python] 开发植物大战僵尸游戏
  18. Xmanager快速连接Linux图形界面教程
  19. 红芯商业计划书曝光:明年要实现3000万利润 2021年冲刺IPO
  20. 亚马逊旺季前的狂风暴雨

热门文章

  1. leetcode 377. Combination Sum IV | 377. 组合总和 Ⅳ(动态规划)
  2. leetcode 229. Majority Element II | 229. 求众数 II(找出现次数超过n/k的元素)
  3. 【Flask】Nginx+Gunicorn+Supervisor部署一个Flask项目:步骤总结
  4. 【区块链:超级账本】Win10 Hyperledger环境搭建
  5. 汇编语言 修改内存中的过时数据
  6. 在onelogin中使用OpenId Connect Implicit Flow
  7. java List实体排序
  8. 07.德国博士练习_09_agg_query
  9. 【整理】使用云计算服务面临的几个安全问题
  10. 很多应用项目都有配置文件,这些配置文件里面定义一些应用需要的参数数据。 如果客户端使用这个类是通过new一个AppConfig的实例来得到一个操作配置 文件内容的对象,则在系统运行中,有 很多地方都需