Jquery表格插件flexgrid使用心得

本文详细介绍了Jquery表格插件Flexgrid的基本配置、回调函数编写、异步数据传输(以JSP SSH框架为例)以及注意事项,包括各种参数设置、Action层、Service层和DAO层的数据处理,帮助开发者深入理解并有效使用Flexgrid。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Jquery表格插件flexgrid使用心得

基本环境的配置。所需要的JS文件和CSS文件如下所示:

<script type="text/javascript" src="../js/jquery-1.8.2.min.js"></script>

<script type="text/javascript" src="../flexigrid-1.1/js/flexigrid.js"></script>

<link rel="stylesheet" type="text/css" href="../flexigrid-1.1/css/flexigrid.css" />

一、基本容器与设置。

1.首先先建立一个空的表格,设置好ID。

<table id="t_user0" style="display:none;"></table>

2.在表格代码的下方初始化表格。

         <table id="t_user0" style="display:none;">

         </table>

         <script type="text/javascript">

                   $(function() {

                            $("#t_user0").flexigrid({

                                     url : "bguser!CommonUsers",

                                     dataType : "json",

                                     colModel : [ {

                                               display : '用户ID',

                                               name : 'usrRegname',

                                               sortable : true,

                                               width : '120'

                                     }, {

                                               display : '用户名',

                                               sortable : true,

                                               width : '80'

                                     }, {

                                               display : '真实姓名',

                                               sortable : true,

                                               width : '100'

                                     }, {

                                               display : '生日',

                                               sortable : true,

                                               width : '60'

                                     }, {

                                               display : '身份证号码',

                                               sortable : true,

                                               width : '80'

                                     }, {

                                               display : '密码提示问题',

                                               sortable : true,

                                               width : '320'

                                     }, {

                                               display : '密码提示答案',

                                               sortable : true,

                                               width : '320'

                                     }, {

                                               display : '所在大学',

                                               sortable : true,

                                              width : '320'

                                     }, {

                                               display : '所在学院',

                                               sortable : true,

                                               width : '320'

                                     }, {

                                               display : '专业班级',

                                               sortable : true,

                                               width : '320'

                                     }, {

                                               display : '入学年份',

                                               sortable : true,

                                               width : '160'

                                     }, {

                                               display : '性别',

                                               sortable : true,

                                               width : '320'

                                     }, {

                                               display : '电子邮件',

                                               sortable : true,

                                               width : '320'

                                     }, {

                                               display : '联系方式',

                                               sortable : true,

                                               width : '320'

                                     }, {

                                               display : 'QQ号码',

                                               sortable : true,

                                               width : '320'

                                     }, {

                                               display : '特长爱好',

                                               sortable : true,

                                               width : '320'

                                     }, {

                                               display : '用户权限',

                                               sortable : true,

                                               width : '320'

                                     } ],

                                     buttons : [ {

                                               name : "设为内部人员",

                                               bclass : "add",

                                               onpress : setinner

                                     }, {

                                               name : "删除",

                                               bclass : "delete",

                                               onpress : deleteitem

                                     } ],

                                     searchitems : [ {

                                               display : '用户名',

                                               name : 'usrRegname'

                                     }, {

                                               separator : true

                                     } ],

                                     sortname : "usrId",

                                     sortorder : "desc",

                                     usepager : true,

                                     title : "普通用户管理",

                                     usrRp : true,

                                     rp : 10,

                                     showTableToggleBtn : true,

                                     height : '300',

                                     width : 'auto'

                            });

                   });

         </script>

注:参数列表(来自网络,未验证是否齐全)

1. height: 200//flexigrid插件的高度,单位为px  

2. width: 'auto'//宽度值,auto表示根据每列的宽度自动计算,在IE6下建议设置具体值否则会有问题  

3. striped: true//是否显示斑纹效果,默认是奇偶交互的形式  

4. novstripe: false,//没用过这个属性  

5. minwidth: 30//列的最小宽度  

6. minheight: 80//列的最小高度  

7. resizable: false//resizable table是否可伸缩  

8. url: false//ajax url,ajax方式对应的url地址  

9. method: 'POST'// data sending method,数据发送方式  

10.dataType: 'json'// type of data loaded,数据加载的类型,xml,json  

11.errormsg: '发生错误'//错误提升信息  

12.usepager: false//是否分页  

13.nowrap: true//是否不换行  

14.page: 1//current page,默认当前页  

15.total: 1//total pages,总页面数  

16.useRp: true//use the results per page select box,是否可以动态设置每页显示的结果数  

17.rp: 25// results per page,每页默认的结果数  

18.rpOptions: [1015202540100], //可选择设定的每页结果数  

19.title: false//是否包含标题  

20.pagestat: '显示记录从{from}{to},总数 {total} '//显示当前页和总页面的样式  

21.procmsg: '正在处理数据,请稍候 ...'//正在处理的提示信息  

22.query: ''//搜索查询的条件  

23.qtype: ''//搜索查询的类别  

24.qop: "Eq"//搜索的操作符  

25.nomsg: '没有符合条件的记录存在'//无结果的提示信息  

26.minColToggle: 1//允许显示的最小列数  

27.showToggleBtn: true//是否允许显示隐藏列,该属性有bug设置成false点击头脚本报错。  

28.hideOnSubmit: true//是否在回调时显示遮盖  

29.showTableToggleBtn: false//是否显示【显示隐藏Grid】的按钮   

30.autoload: true//自动加载,即第一次发起ajax请求  

31.blockOpacity: 0.5//透明度设置  

32.onToggleCol: false//当在行之间转换时,可在此方法中重写默认实现,基本无用  

33.onChangeSort: false//当改变排序时,可在此方法中重写默认实现,自行实现客户端排序  

34.onSuccess: false//成功后执行  

35.onSubmit: false// 调用自定义的计算函数,基本没用   

 

二、编写按钮的回调函数。

                   function deleteitem(com, grid) {

                            var length = $('.trSelected', grid).length;

                            if (length > 1) {

                                     alert('一次只能删除一条记录。');

                            } else if (length == 1) {

                                     var uid = $('.trSelected', grid).find("td:first div").html();

                                     if (confirm('确定要删除ID为 ' + uid + ' 的用户吗?')) {

                                               $.post("bguser!delUser", {

                                                        'usrId' : uid

                                               }, function(data) {

                                                        if (data.flag) {

                                                                 alert("删除成功!");

                                                        } else {

                                                                 alert("删除失败,请重试!");

                                                        }

                                                        $('#t_user0').flexOptions({

                                                                 newp : 1

                                                        }).flexReload();

                                               }, "json");

                                     }

                            }

                   }

                   function setinner(com, grid) {

                            var length = $('.trSelected', grid).length;

                            if (length > 1) {

                                     alert('一次只能修改一条记录。');

                            } else if (length == 1) {

                                     var uid = $('.trSelected', grid).find("td:first div").html();

                                     if (confirm('确定要提升ID为 ' + uid + ' 的用户为内部人员吗?')) {

                                               $.post("bguser!addInner", {

                                                        'usrId' : uid

                                               }, function(data) {

                                                        if (data.flag) {

                                                                 alert("设置成功!");

                                                        } else {

                                                                 alert("设置失败,请重试!");

                                                        }

                                                        $('#t_user0').flexOptions({

                                                                 newp : 1

                                                        }).flexReload();

                                               }, "json");

                                     }

                            }

                   }

 

三、异步传输数据(以JSP的SSH框架为例)

1.Action层。

在action类里定义以下几个成员变量:

      private int page;//当前的页码

      private int total;//总页数

      private int rp;//每页显示的数量

      private String rows;//要返回的JSON数组

      private String query;//查询的字段的关键字

      private String qtype;//查询的字段类型的名字

完整的action样例代码:

package com.bangit.action;

 

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.List;

 

import net.sf.json.JSONArray;

import net.sf.json.JSONObject;

import net.sf.json.JsonConfig;

import net.sf.json.util.PropertyFilter;

 

import com.bangit.entity.BangitUsers;

import com.bangit.entity.Page;

import com.bangit.exception.UserException;

import com.bangit.json.DateTransfer;

import com.bangit.service.BangitUsersService;

import com.bangit.utils.PropertiesList;

 

/**

 * 后台对用户的操作

 *

 * @author wuxinwei

 *

 */

public class BgUserAction extends BaseAction {

         private BangitUsersService userService;

         private int page;

         private int total;

         private int rp;

         private String rows;

         private String query;

         private String qtype;

         private int usrId;

         private boolean flag;

 

         /**

          * 分页获取普通用户,并转成json字符串返回

          *

          * @return

          */

         public String CommonUsers() {

                   Page<BangitUsers>  user_page = new Page<BangitUsers>(page, total, rp);

                   user_page = userService.findUsersByPage(user_page, query, qtype,

                                     PropertiesList.LOGIN_TYPE_COMM);

                   rows = parseUserPage2Json(user_page);

                   return RETURN_JSON;

         }

 

         /**

          * 分页获取内部用户,并转成json字符串返回

          *

          * @return

          */

         public String InnerUsers() {

                   Page<BangitUsers> user_page = new Page<BangitUsers>(page, total, rp);

                   user_page = userService.findUsersByPage(user_page, query, qtype,

                                     PropertiesList.LOGIN_TYPE_INNER);

                   rows = parseUserPage2Json(user_page);

                   return RETURN_JSON;

         }

 

         /**

          * 分页获取管理员,并转成json字符串返回

          *

          * @return

          */

         public String AdminUsers() {

                   Page<BangitUsers> user_page = new Page<BangitUsers>(page, total, rp);

                   user_page = userService.findUsersByPage(user_page, query, qtype,

                                     PropertiesList.LOGIN_TYPE_ADMIN);

                   rows = parseUserPage2Json(user_page);

                   return RETURN_JSON;

         }

 

         /**

          * 删除指定用户

          *

          * @return

          */

         public String delUser() {

                   try {

                            userService.deleteUser(usrId);

                            flag = true;

                   } catch (UserException e) {

                            e.printStackTrace();

                            flag = false;

                   }

                   return RETURN_VALI_JSON;

         }

 

         /**

          * 将某用户转为普通用户,并转成json字符串返回

          *

          * @return

          */

         public String addComm() {

                   try {

                            userService.changePrivilege(usrId, PropertiesList.LOGIN_TYPE_COMM);

                            flag = true;

                   } catch (UserException e) {

                            e.printStackTrace();

                            flag = false;

                   }

                   return RETURN_VALI_JSON;

         }

 

         /**

          * 将某用户转为内部用户,并转成json字符串返回

          *

          * @return

          */

         public String addInner() {

                   try {

                            userService.changePrivilege(usrId, PropertiesList.LOGIN_TYPE_INNER);

                            flag = true;

                   } catch (UserException e) {

                            e.printStackTrace();

                            flag = false;

                   }

                   return RETURN_VALI_JSON;

         }

 

         /**

          * 将某用户转为管理员,并转成json字符串返回

          *

          * @return

          */

         public String addAdmin() {

                   try {

                            userService.changePrivilege(usrId, PropertiesList.LOGIN_TYPE_ADMIN);

                            flag = true;

                   } catch (UserException e) {

                            e.printStackTrace();

                            flag = false;

                   }

                   return RETURN_VALI_JSON;

         }

 

         /**

          * 将一个page解析成json字符串返回

          *

          * @param p

          * @return

          */

         private String parseUserPage2Json(Page<BangitUsers> p) {

                   page = p.getCurrentPage();

                   total = p.getTotal();

                   rp = p.getRp();

                   List<BangitUsers> l = p.getObjs();

                   JsonConfig jsonConfig = new JsonConfig();

                   PropertyFilter filter = new PropertyFilter() {

                            @Override

                            public boolean apply(Object source, String name, Object value) {

                                     if ("bangitResourceses".equals(name)

                                                        || "bangitTask2users".equals(name))

                                               return true;

                                     return false;

                            }

                   };

                   jsonConfig.setJsonPropertyFilter(filter);

                   jsonConfig.registerJsonValueProcessor(Date.class, new DateTransfer());

                   JSONArray items = new JSONArray();

                   for (BangitUsers user : l) {

                            JSONObject item = new JSONObject();

                            JSONArray array = new JSONArray();

                            array.add(user.getUsrId());

                            array.add(user.getUsrRegname());

                            array.add(user.getUsrRealname());

                            array.add(user.getUsrBirthday().toString());

                            array.add(user.getUsrIdnumber());

                            array.add(user.getUsrQuestion());

                            array.add(user.getUsrAnswer());

                            array.add(user.getUsrSchool());

                            array.add(user.getUsrFaculty());

                            array.add(user.getUsrClass());

                            SimpleDateFormat sdf = new SimpleDateFormat("yyyy");

                            array.add(sdf.format(user.getUsrSchoolyear()));

                            array.add(user.getUsrSex());

                            array.add(user.getUsrEmail());

                            array.add(user.getUsrPhone());

                            array.add(user.getUsrQq());

                            array.add(user.getUsrSkill());

                            array.add(user.getUsrPrivilege());

                            item.put("cell", array.toString());

                            items.add(item);

                   }

                   return items.toString();

         }

 

         public BangitUsersService getUserService() {

                   return userService;

         }

 

         public void setUserService(BangitUsersService userService) {

                   this.userService = userService;

         }

 

         public int getPage() {

                   return page;

         }

 

         public void setPage(int page) {

                   this.page = page;

         }

 

         public int getTotal() {

                   return total;

         }

 

         public void setTotal(int total) {

                   this.total = total;

         }

 

         public int getRp() {

                   return rp;

         }

 

         public void setRp(int rp) {

                   this.rp = rp;

         }

 

         public String getRows() {

                   return rows;

         }

 

         public void setRows(String rows) {

                   this.rows = rows;

         }

 

         public String getQuery() {

                   return query;

         }

 

         public void setQuery(String query) {

                   this.query = query;

         }

 

         public String getQtype() {

                   return qtype;

         }

 

         public void setQtype(String qtype) {

                   this.qtype = qtype;

         }

 

         public int getUsrId() {

                   return usrId;

         }

 

         public void setUsrId(int usrId) {

                   this.usrId = usrId;

         }

 

         public boolean isFlag() {

                   return flag;

         }

 

         public void setFlag(boolean flag) {

                   this.flag = flag;

         }

 

}

 

注:需要注意的是先前设定的那几个必须的成员变量的使用及返回的json数组字符串的格式。在struts2传回json字符串的时候,我发现flexgrid无法解析,不知道是不是因为我返回的json字符串不规范,总之我还修改了flexgrid的源代码,在flexgrid.js中搜索

if (p.dataType == 'json') {

然后在下面添加一句:

var arr = jQuery.parseJSON(data.rows);

解析返回的data字符串的rows,就正常啦。

同时本人写了一个Page的类用来分页从数据库取值。

Page类的代码如下:

package com.bangit.entity;

 

import java.util.List;

 

public class Page<E> {

      private int currentPage;// 当前页

      private int total;// 总页数

      private int rp;// 每页的数量

      private List<E> objs;// 返回后的对象队列

      public Page() {

      }

 

      public Page(int currentPage, int total, int rp) {

           this.currentPage = currentPage;

           this.total = total;

           this.rp = rp;

      }

 

      public int getCurrentPage() {

           return currentPage;

      }

 

      public void setCurrentPage(int currentPage) {

           this.currentPage = currentPage;

      }

 

      public int getTotal() {

           return total;

      }

 

      public void setTotal(int total) {

           this.total = total;

      }

 

      public int getRp() {

           return rp;

      }

 

      public void setRp(int rp) {

           this.rp = rp;

      }

 

      public List<E> getObjs() {

           return objs;

      }

 

      public void setObjs(List<E> objs) {

           this.objs = objs;

      }

 

}

 

 

2.Service层。FindUserByPage方法的代码:

      public Page<BangitUsers> findUsersByPage(Page<BangitUsers> user_page,

                 String query, String qtype, int loginTypeComm) {

           return userDAO.findByPage(user_page, query, qtype, loginTypeComm);

      }

 

         3.DAO层。findByPage方法的代码:

      public Page<BangitUsers> findByPage(final Page<BangitUsers> user_page,

                 final String query, final String qtype,final int utype) {

           final String hql = "from BangitUsers u where u."+qtype+" like '%"+query+"%' and u.usrPrivilege="+utype;

           List<BangitUsers> list = getHibernateTemplate().execute(

                      new HibernateCallback<List<BangitUsers>>() {

                            @Override

                            public List<BangitUsers> doInHibernate(Session session)

                                       throws HibernateException, SQLException {

                                  int first = user_page.getRp()

                                             * (user_page.getCurrentPage() - 1);

                                  Query query = session.createQuery(hql);

                                  query.setFirstResult(first);

                                  query.setMaxResults(user_page.getRp());

                                  return query.list();

                            }

                      });

           user_page.setObjs(list);

           user_page.setTotal(getHibernateTemplate().find(hql).size());

           return user_page;

      }

 

四、结语。

本文主要为本人在使用flexgrid的过程中的学习记录,方便日后查阅,可能写的不是很形象,代码较多,需要耐心阅读,见谅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值