Jquery插件FLexiGrid完全配置

       首先.去下载FlexGrid http://www.flexigrid.info/ ,下载完成后.解压开有__MACOSX和flexigrid两个文件夹 ,主要使用flexigrid里面的文件 
      flexgrid文件夹下文件如下 :


 
    准备工作完成后 真正工作开始了 在MyEclipse下新建Webproject.. 把flexigrid包下所有的文件拷贝到WebRoot/下 
     新建*.jsp页面 body体中 加入 

Jsp代码 

1.   <table id="flex1" style="display:none"></table>  


做完flexigrid控件的显示容器. 没有则不会显示控件 
页面引入控件代码 

Javascript代码 

1.   <table id="flex1" style="display:none"></table>  

2.               <input id="hidden" type="hidden" name="hidden" value="null" />  

3.               <script>  

4.               $("#flex1").flexigrid  

5.               (  

6.               {  

7.               url: '../ReleaseInfoServlet?hidden=manage',  

8.               dataType: 'json',  

9.               colModel : [  

10.                  {display: '信息编号', name : 'RINO', width : 50, sortable : true, align: 'center',hide: false},  

11.                  {display: '信息标题', name : 'RITITLE', width : 250, sortable : true, align: 'center'},  

12.                  {display: '信息类别', name : 'IC.ICNAME', width : 100, sortable : true, align: 'center'},  

13.                  {display: '信息热点', name : 'RIHOTPOINT', width : 60, sortable : true, align: 'center'},  

14.              <!--{display: '信息内容', name : 'RICONTENT', width : 100, sortable : true, align: 'center'},-->  

15.                  {display: '发布日期', name : 'RIDATE', width : 120, sortable : true, align: 'center'},  

16.                  {display: '发布作者', name : 'RIAUTHOR', width : 80, sortable : true, align: 'center'}                                                                

17.                  ],  

18.              buttons : [  

19.                  {name: '添加', bclass: 'add', onpress : button},  

20.                  {name: '删除', bclass: 'delete', onpress : button},  

21.                  {name: '修改', bclass: 'modify', onpress : button},                 

22.                  {separator: true}  

23.                  ],  

24.              searchitems : [  

25.                  {display: '信息编号', name : 'RINO', isdefault: true},  

26.                  {display: '信息标题', name : 'RITITLE'},  

27.                  {display: '信息类别', name : 'IC.ICNAME'},  

28.                  {display: '发布作者', name : 'RIAUTHOR'}  

29.                  ],  

30.              sortname: "RINO",  

31.              sortorder: "desc",  

32.              usepager: true,  

33.              title: '信息发布管理',  

34.              useRp: true,  

35.              rp: 20,  

36.              showTableToggleBtn: true,  

37.              width: 780,  

38.              height: 300  

39.              }  

40.              );  

41.                

42.              function button(com,grid)  

43.              {  

44.                  if (com=='删除')  

45.                      {  

46.                          ${"hidden"}.value="delete";  

47.                          if($('.trSelected',grid).length==0){  

48.                              alert("请选择要删除的数据");  

49.                          }else{  

50.                              if(confirm('是否删除这 ' + $('.trSelected',grid).length + 条记录吗?'))  

51.                              {  

52.                                var  id ="";  

53.                               for(var i=0;i<$('.trSelected',grid).length;i++){  

54.                                  if(i==$('.trSelected',grid).length-1){  

55.                                      id += "id="+$('.trSelected',grid).find("td:first").eq(i).text();  

56.                                  } else {  

57.                                      id += "id="+$('.trSelected',grid).find("td:first").eq(i).text()+"&";  

58.                                  }  

59.                                }  

60.                                window.location.href="../ReleaseInfoServlet?hidden="+${"hidden"}.value+"&"+id;  

61.                            }  

62.                         }  

63.                      }  

64.                  else if (com=='添加')  

65.                      {  

66.                          ${"hidden"}.value="add";  

67.                          window.location.href="infoAdd.jsp?hidden="+${"hidden"}.value;  

68.                      }  

69.                  else if (com=='修改')  

70.                  {  

71.                      ${"hidden"}.value="modify";  

72.                      if($(".trSelected").length==1){  

73.                          window.location.href="infoAdd.jsp?hidden="+${"hidden"}.value+"&id="+$('.trSelected',grid).find("td").eq(0).text();  

74.                      }else if($(".trSelected").length>1){  

75.                          alert("请选择一个修改,不能同时修改多个");  

76.                      }else if($(".trSelected").length==0){  

77.                          alert("请选择一个您要修改的新闻信息")  

78.                      }  

79.                  }  

80.              }    


flexgrid参数介绍: 

Javascript代码 

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

2.   width: ‘auto’, //宽度值,auto表示根据每列的宽度自动计算  

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

4.   novstripe: false,  

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

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

7.   resizable: true//是否可伸缩  

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

9.   method: ‘POST’, // 数据发送方式  

10.  dataType: ‘xml’, // 数据加载的类型  

11.  errormsg: ‘Connection Error’,//错误提升信息  

12.  usepager: false//是否分页  

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

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

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

16.  useRp: true//是否可以动态设置每页显示的结果数  

17.  rp: 15, // 每页默认的结果数  

18.  rpOptions: [10,15,20,25,40],//可选择设定的每页结果数  

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

20.  pagestat: ‘Displaying {from} to {to} of {total} items’,//显示当前页和总页面的样式  

21.  procmsg: ‘Processing, please wait …’,//正在处理的提示信息  

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

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

24.  nomsg: ‘No items’,//无结果的提示信息  

25.  minColToggle: 1, //minimum allowed column to be hidden  

26.  showToggleBtn: true//show or hide column toggle popup  

27.  hideOnSubmit: true,//隐藏提交  

28.  autoload: true,//自动加载  

29.  blockOpacity: 0.5,//透明度设置  

30.  onToggleCol: false,//当在行之间转换时  

31.  onChangeSort: false,//当改变排序时  

32.  onSuccess: false,//成功后执行  

33.  onSubmit: false // 调用自定义的计算函数   



注意
Head标签必须要引入 

Jsp代码 

1.   <link rel="stylesheet" href="css/flexigrid/flexigrid.css"  

2.               type="text/css"></link>  

3.   <script type="text/javascript" src="lib/jquery/jquery.js"></script>  

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


jquery.js、flexigrid.css、flexigrid.js 
三个主要文件 
自己要根据自己的文件路径.去引入css\js文件 
页面完成启动tomcat测试页面会不会显示控件. 
应该是没有问题的,只是没有数据 
 
主要的还是后台的操作 
这里由于时间关系只介绍select方法了. 
可以看到flex无刷新的路径是一个servlet.看看servlet做了些什么? 

Java代码 

1.   response.setContentType("text/html;charset=UTF-8");  

2.   ReleaseInfoDao rid = new ReleaseInfoDao();  

3.   String hidden = request.getParameter("hidden");  

4.   PrintWriter out = response.getWriter();  


首先接收路径传过来的hidden值. 
因为后面我会根据hidden值做各种操作.所以url重写了一些字段.大家可以不用如此. 

Java代码 

1.   if(hidden.equals("manage")){  

2.   //          获得当前页数  

3.               String pageIndex = request.getParameter("page");  

4.   //          获得每页数据最大量  

5.               String pageSize = request.getParameter("rp");  

6.   //          获得模糊查询文本输入框的值  

7.               String query = new String(request.getParameter("query").getBytes("ISO8859-1"),"UTF-8");  

8.   //          获得模糊查询条件  

9.               String qtype = request.getParameter("qtype");  

10.              if(query==""||("").equals(query)){  

11.                  Map pageInfo = new HashMap();  

12.                  pageInfo.put("page", pageIndex);  

13.                  pageInfo.put("total", rid.getReleaseInfoCount());  

14.  //              数据JSON格式化  

15.                  String jsonStr = rid.creReleaseInfoJSON(rid.getReleaseInfo(Integer.parseInt(pageIndex), Integer.parseInt(pageSize)), pageInfo);  

16.  //              response相关处理  

17.                  response.setContentType("html/txt");  

18.                  response.setCharacterEncoding("utf-8");     

19.                  response.setHeader("Pragma""no-cache");     

20.                  response.setHeader("Cache-Control""no-cache, must-revalidate");     

21.                  response.setHeader("Pragma""no-cache");     

22.                  try {     

23.                      response.getWriter().write(jsonStr);     

24.                      response.getWriter().flush();     

25.                      response.getWriter().close();  

26.                  } catch (IOException e) {     

27.                      e.printStackTrace();     

28.                  }  

29.              }else{  

30.                  Map pageInfo = new HashMap();  

31.                  pageInfo.put("page", pageIndex);  

32.                  pageInfo.put("total", rid.getReleaseInfoCountLike(qtype, query));  

33.  //              数据JSON格式化  

34.                  String jsonStr = rid.creReleaseInfoJSON(rid.getReleaseInfoLike(Integer.parseInt(pageIndex), Integer.parseInt(pageSize), qtype, query), pageInfo);  

35.  //              response相关处理  

36.                  response.setContentType("html/txt");  

37.                  response.setCharacterEncoding("utf-8");     

38.                  response.setHeader("Pragma""no-cache");     

39.                  response.setHeader("Cache-Control""no-cache, must-revalidate");     

40.                  response.setHeader("Pragma""no-cache");     

41.                  try {     

42.                      response.getWriter().write(jsonStr);     

43.                      response.getWriter().flush();     

44.                      response.getWriter().close();  

45.                  } catch (IOException e) {     

46.                      e.printStackTrace();     

47.                  }  

48.              }  

49.          }  


可以看到许多request.getParameter("***"); 
是后去flexigrid控件的一些参数. 
大家可以到flexigrid.js文件里面看到这些参数. 
page//获取当前的页数. 
rp//每页显示多少行数据 

Javascript代码 

1.   rp: 20,  


query//点击放大镜出现搜索功能,是Input文本框的值 
qtype//是搜索功能后面的select的值 
根据query的操作判断是模糊查询还是全部查询数据. 
Servlet全部代码看完了. 
看看.Dao层的数据层的代码吧. 
主要引用Dao的代码如下 
主要代码1. 

Java代码 

1.   pageInfo.put("total", rid.getReleaseInfoCount());  

2.   String jsonStr = rid.creReleaseInfoJSON(rid.getReleaseInfo(Integer.parseInt(pageIndex), Integer.parseInt(pageSize)), pageInfo);  


rid为ReleaseInfoDao的实例对象(发布信息表) 
首先我们来看getReleaseInfoCount()方法 

Java代码 

1.   /** 

2.        * 获得信息表所有的数据量, 

3.        * 并返回数据个数 

4.        * @return 

5.        */  

6.       public long getReleaseInfoCount(){  

7.           long count =0l;  

8.           QueryRunner queryRunner = new QueryRunner();  

9.           String query = "select count(*) as num from TB_ReleaseInfo";  

10.          try {  

11.              Map map = (Map)queryRunner.query(DBConnection.getConnection(), query, new MapHandler());  

12.              count = Long.parseLong(map.get("num").toString());  

13.          } catch (SQLException e) {  

14.              e.printStackTrace();  

15.          } finally {  

16.              DBConnection.close();  

17.          }  

18.          return count;  

19.      }  


主要代码2. 

Java代码 

1.   String jsonStr = rid.creReleaseInfoJSON(rid.getReleaseInfo(Integer.parseInt(pageIndex), Integer.parseInt(pageSize)), pageInfo);  


这里看到返回的是json格式的数据 
主要Dao层方法为creReleaseInfoJSON();getReleaseInfo(intpageIndex,int pageSize);方法 
getReleaseInfo代码如下 

Java代码 

1.   /** 

2.        * 分页查询 

3.        * @param pageIndex 

4.        * @param pageSize 

5.        * @return 

6.        */  

7.       public List getReleaseInfo(int pageIndex,int pageSize){  

8.           List releaseInfoList = new ArrayList();  

9.           int beginIndex = (pageIndex-1)*pageSize;  

10.          int endIndex = pageIndex*pageSize;  

11.          QueryRunner queryRunner = new QueryRunner();  

12.          String query = "select * from (" +  

13.                  "select rownum rn,rino,rititle,ritype,icname,rihotpoint,ricontent,ridate,riauthor " +  

14.                  "from (" +  

15.                  "select ri.rino,ri.rititle,ri.ritype,ic.icname,ri.rihotpoint,ri.ricontent,ri.ridate,ri.riauthor" +  

16.                  " from TB_ReleaseInfo ri ,TB_InfoCategroy ic where ri.ritype = ic.icno " +  

17.                  "order by ri.rino desc) where rownum<=?) where rn>?";  

18.          try {  

19.              releaseInfoList = (List)queryRunner.query(DBConnection.getConnection(), query,new Object[]{new Integer(endIndex),new Integer(beginIndex)},new MapListHandler());  

20.          } catch (SQLException e) {  

21.              e.printStackTrace();  

22.          } finally {  

23.              DBConnection.close();  

24.          }  

25.          return releaseInfoList;  

26.      }  


上述方法的SQL为Oracle的分页查询.MS SQL、MySql等.其他数据库不适用. 
creReleaseInfoJSON代码如下: 

Java代码 

1.   /** 

2.        * 数据JSON格式化 

3.        * @param list 

4.        * @param pageInfo 

5.        * @return 

6.        */  

7.       public String creReleaseInfoJSON(List list,Map pageInfo){  

8.           String jsonStr = "";  

9.           List mapList = new ArrayList();  

10.          for(int i=0;i<list.size();i++){  

11.              Map cellMap = new HashMap();  

12.              cellMap.put("id", ((Map)list.get(i)).get("RINo").toString());  

13.              cellMap.put("cell"new Object[]{  

14.                      ((Map)list.get(i)).get("RINo"),  

15.                      ((Map)list.get(i)).get("RITitle"),  

16.                      ((Map)list.get(i)).get("ICName"),  

17.                      ((Map)list.get(i)).get("RIHotpoint"),  

18.                      ((Map)list.get(i)).get("RIDATE"),  

19.                      ((Map)list.get(i)).get("RIAuthor")  

20.              });  

21.              mapList.add(cellMap);  

22.          }  

23.          pageInfo.put("rows", mapList);  

24.          JSONObject object = new JSONObject(pageInfo);  

25.          jsonStr = object.toString();  

26.          return jsonStr;  

27.      }  


返回的JSON格式的数据: 

Java代码 

1.   jsonStr{"total":3,"page":"1","rows":[{"id":"8","cell":[8,"啊啊","什么玩意","","2009-06-24 14:30:11","admin"]},{"id":"7","cell":[7,"来挑心底1","媒体声音","","2009-06-24 14:29:55","admin"]},{"id":"3","cell":[3,"新茶品","最热新闻","","2009-06-24 13:55:00","admin"]}]}  


JSONObject代码在下面的附件里有. 
还有需要解释的地方. 
大家可以看到dao 
并没有 
Connection 
PreparedStatement 
ResultSet 
等对象. 
我操作数据使用的是. 
commons-dbutils-1.1.jar(下面的附件中也包含有.) 

整体的介绍完了. 
可以说比较考验个人读代码的能力.个人细心的能力. 

上述代码.应该是没有问题的. 
因为我测试一点问题没有. 
可能是因为您配置或者书写代码的问题.. 
可能会出现这样那样的困难. 
也请不要进行人身攻击. 
在做这个的时候.我也碰到许多问题。 
耐心些。 没有解决不了的问题. 

鄙人写代码很烂. 各位大牛们 就不要拍砖了. 凑活看就行了. 

如果什么问题. 
请到本人博客留言. 
只要是本人会的 
定会尽力解决. 

花费半个点的功夫.整理一下.. 各位笑纳了. 
遗留问题:点击标题.自动排序的问题.. 如果哪位哥们解决了.. 请在本人博客留言. 
十分感谢您的帮助 

Ps: 很感谢 ayeah 同学.. 
   在此以前. 一直认为是flexgrid.实际正确的拼写为flexigrid. 十分低级的错误. 
   呵呵. 还望各位同学见谅. 
项目源码:请到这里下载JQuery 插件FlexiGrid 之完全配置与使用-{Demo+Data}

你可能感兴趣的:(jquery插件)