最近项目的特殊性可算是把我折腾得够呛,从最开始的整站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或者其他的话可以根据自己的思路转换,这里只说明自己的简单实现。毕竟现在不用了,没研究那么多

datagrid java_Easyui Datagrid增删改及后台交互(java)相关推荐

  1. easyui框架前后端交互_Easyui Datagrid增删改及后台交互(java)

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

  2. Redis基础类型ZSet增删改查(带Java库源码)

    1 缘起 继续系统补充Redis基础数据类型操作知识. 为帮助读者更加系统地学习Redis基础数据操作, 分享其他数据类型操作文章: 序号 文章 1 String操作详解 2 Hash操作详解 3 L ...

  3. java对数据库的增删改查_在java中对数据库进行增删改查

    代码区域: package com.oracle.jdbc.demo1; import java.sql.Connection; import java.sql.DriverManager; impo ...

  4. easyui datagrid java_EasyUI DataGrid 显示不了数据????

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Struts2: ``` text/html ``` action: ``` public String getList() throws Excepti ...

  5. Mysql 增删改查 Python交互01

    1. 数据库 - 1. 数据库 :存储数据的仓库 - 2. 数据库软件分类 :* 1. MySQL,Oracle,SQL Server,MongoDB,DB2,MariaDB,Redis...* 2. ...

  6. java连接mysql实现增删改查_JDBC之Java连接mysql实现增删改查

    使用软件:mysql.eclipse 链接步骤: 1.注册驱动 2.创建一个连接对象 3.写sql语句 4.执行sql语句并返回一个结果或者结果集 5.关闭链接(一般就是connection.stat ...

  7. 面试 增删改查用的java知识,工作3年的程序员,面试还说自己只会增删改查?这些高频面试题还不看起来!...

    前言 我们都知道 Java 的知识面非常广,面试问的涉及也非常广泛,重点包括:Java 基础.Java 并发,JVM.MySQL.数据结构.算法.Spring.微服务.MQ等等,涉及的知识点何其庞大, ...

  8. es java 增删改查_【java作业】如何用序列化的方法写增删改查

    培训19天的时候老师布置了一个用序列化反序列化做学生管理系统的作业.百度没找到怎么写,后来老师写了一份,我就贴出来吧.对蠢萌蠢萌.纱布拉基的我来说真TM难 首先你的包和里面的类是跟下图这样的:Work ...

  9. java小程序增删改查_用java编一个卡拉ok小程序 有增删改查就可以

    publicclassMainInterfaceextendsJFrameimplementsActionListener{//AddSongas=newAddSong();publicvoidini ...

最新文章

  1. bat curl 返回值_bat curl 发送http请求 监控网站
  2. 深度学习在超市商品识别中的解决方案分享
  3. twiiq开发随笔(2)
  4. AngularJS:在Windows上安装Yeoman
  5. zip、gz压缩文件查看命令zless、less
  6. 从桌面到移动:异构计算翻天覆地的技术变革
  7. 深圳市南山区派出所地址和电话列表
  8. linux box 黑屏,在linux16.04上安装virturalbox的时候出现问题
  9. extjs中rowEditing动态编辑
  10. 用计算机算微积分,AP微积分AB BC 计算器使用要求
  11. Code Review: Rietveld平台的搭建和Rietveld的使用。
  12. 一文让你详细了解CPU的内部架构和工作原理(好文)
  13. cad卸载不干净_Mac软件卸载不干净?你可以试试AppCleaner
  14. AD绘制PCB板框+定位孔(Altium Designer)
  15. 〖Python 数据库开发实战 - Python与Redis交互篇⑯〗- 综合案例 - 新闻管理系统第二阶段完结 - “app.py“ 模块收尾及案例演示
  16. 安装linux系统,卡在Detecting hardware
  17. aws mysql 费用_AWS都收了哪些费用?
  18. 纯文科生学计算机编程难度大不大
  19. 华尔街日报:郭台铭的“紫禁城”
  20. mysql单表1000万条_mysql单表千万条数据测试

热门文章

  1. antd 表格树如何展开_元件区域 -- 菜单 | 表格 | 流程图 | 图标
  2. 汉诺塔的java实现及一种思路
  3. 汉字笔顺口诀_【小学语文知识】汉字书写笔顺口诀+书写规则
  4. ad16不能去除铺铜_海水小讲堂006 铜离子的正确使用姿势
  5. Double类型比较大小
  6. 因 Cannot resolve com.lowagie:itext:2.1.7.js6,选择手动安装 Jar 包进 Maven 仓库
  7. C++ vector 容器的使用
  8. Kotlin入门(25)共享参数模板
  9. php double 类型 浮点数相减
  10. malloc calloc realloc