• operamasksui之omGrid简单使用


    1.背景

    1)本文只是简单记录下怎么使用operamasks-ui的omGrid进行增删改查,大部分代码可在operamasks-ui的demo看到;

    2)前台使用freemarker模板,后台使用了Nutz框架;

    2.先看下效果


    3.前台代码编写

    1)html

    Freemarker代码  收藏代码
    1. <@m.mp title="测试1" jquery="jquery-1.7.min" css="test/default" js="test/test6/index">  
    2. <@m.omui />  
    3.   
    4. <div style="margin-left:30px;margin-top:20px">  
    5.         <input type="button" id="add" value="新增"/>  
    6.         <input type="button" id="del" value="删除"/>  
    7.         <input type="button" id="save" value="保存修改"/>  
    8.          姓名:<input id="qUserName"></input>  
    9.         <input id="query" type="button" value="查询"/>  
    10.         <table id="grid"></table>  
    11. </div>  
    12.   
    13. </@m.mp>  

    其中的 <@m.mp> 是自己编写的标签库,用于生成页面主体

    其中的 <@m.omui />  是自己写的引入operamasks-ui的标签库,此标签的作用就是在页面上引入operamasks-ui所需的css和js文件。

    2)css

    Css代码  收藏代码
    1. .om-grid div.bDiv tr.grayRow {  
    2.     background-color: gray;  
    3. }  

     

    这里面根本就没什么内容。。。

    3)js

    主要演员都在这里了

    Js代码  收藏代码
    1. $(document).ready(function() {  
    2.       
    3.     $.validator.addMethod("birthday"function(value) {  
    4.         return /^\d{4}年\d{2}月\d{2}日$/.test(value);  
    5.     }, '生日格式必须为 xxxx年xx月xx日');  
    6.   
    7.     var genderOptions = {  
    8.         dataSource : [{text:"请选择",value:""},{text:"女生" , value:"female"},{text:"男生",value:"male"},{text:"未知",value:"unknowned"}],  
    9.         editable: false  
    10.     };  
    11.   
    12.     var ageOptions = {  
    13.         allowDecimals:false,  
    14.         allowNegative:false  
    15.     };  
    16.   
    17.     var birthdayOptions = {  
    18. //      dateFormat:"yy年mm月dd日"  
    19.         dateFormat : "yy-mm-dd H:i:s",  
    20.         showTime : true  
    21.     };  
    22.       
    23.     $('#grid').omGrid({  
    24.         title : '表格',  
    25.          "90%",  
    26.         height:450,  
    27.         showIndex : false,  
    28.         singleSelect : true//出现checkbox列,可以选择同时多行记录  
    29.         //rowClasses:['oddRow','evenRow','grayRow'],  
    30. //        onRowDblClick : function(rowIndex,rowData,event) {  
    31. //            var rtn = [];  
    32. //            for (var p in rowData) {  
    33. //                rtn.push(p + ':' + rowData[p]);  
    34. //            }  
    35. //            alert("双击事件。双击的行数据为:" + rtn.join(" "));  
    36. //        },  
    37.         //展开行时使用下面的方法生成详情,必须返回一个字符串  
    38. //        rowDetailsProvider:function(rowData,rowIndex){  
    39. //            return '第'+(rowIndex+1)+'行<br/>'  
    40. //            +'ID='+rowData.id  
    41. //            +',用户名:<b>'+rowData.userName+'</b>'  
    42. //            +',密码:<b>'+rowData.password+'</b><br/>'  
    43. //            +'所属组为:<font color="red">'+rowData.userType+'</font>';  
    44. //        },  
    45.         onRowClick : function(index,rowData,event){  
    46.             $('#grid').omGrid('editRow',index);  
    47.         },  
    48.         limit : 10, //分页显示,每页显示多少条  
    49.         dataSource : 'test62.html',  
    50.         colModel : [ {header : 'ID', name : 'id', width : 100, align : 'center',sort:'clientSide',editor:{editable:false}},   
    51.                      {header : '姓名', name : 'userName', width : 120, align : 'left',sort:'clientSide',  
    52.                         editor:{  
    53.                             rules:["required",true,"姓名是必填的"],  
    54.                             type:"text",  
    55.                             editable:true,  
    56.                             name:"userName"  
    57.                         }  
    58.                      },   
    59.                      {header : '密码', name : 'password', align : 'left',  
    60.                         renderer : function(colValue, rowData, rowIndex) {  
    61.                              if (colValue == '123456') {  
    62.                                  return '<span style="color:red;"><b>' + colValue + '</b></span>';  
    63.                              } else if (colValue == "123A@wq") {  
    64.                                  return '<span style="color:green;"><b>' + colValue + '</b></span>';  
    65.                              }  
    66.                              return colValue;  
    67.                         },  
    68.                         editor:{  
    69.                             rules:["required",true,"密码不能为空"],  
    70.                             type:"text",  
    71.                             editable:true,  
    72.                             name:"password"  
    73.                         }  
    74.                      },  
    75. //                     width : 'autoExpand'  
    76.                      {header : '出生日期', name : 'birthday', width : 180, align : 'left',sort:'clientSide',  
    77. //                      renderer : function(colValue, rowData, rowIndex) {  
    78. //                             return "2012年06月10日";  
    79. //                        },  
    80.                         editor:{  
    81.                             //rules:["birthday"],  
    82.                             type:"omCalendar",  
    83.                             editable:true,  
    84.                             name:"birthday",  
    85.                             options:birthdayOptions  
    86.                         }  
    87.                      }  
    88.                    ]  
    89.                      
    90.                      
    91.     });  
    92.   
    93.     $('#add').click(function(){  
    94.         $.ajax({  
    95.             type: "POST",  
    96.             url: "test65.html",  
    97.             async: false,  
    98.             dataType: "json",  
    99.             success: function(data){  
    100.                 if(data.flag){  
    101.                     $('#grid').omGrid('insertRow',0,{id:data.id});  
    102.                 }  
    103.                   
    104.             }  
    105.         });  
    106.           
    107.           
    108.     });  
    109.       
    110.     $('#del').click(function(){  
    111.         var dels = $('#grid').omGrid('getSelections');  
    112.         if(dels.length <= 0 ){  
    113.             alert('请选择删除的记录!');  
    114.             return;  
    115.         }  
    116.         $('#grid').omGrid('deleteRow',dels[0]);  
    117.     });  
    118.   
    119.     $('#save').click(function(){  
    120.         var formData = $('#grid').omGrid('getChanges');  
    121.         //alert(formData["update"][0].userName);  
    122.           
    123.         /*****此处传递data到后台并处理*******/  
    124.         var formDataStr = JSON.stringify(formData);  
    125.           
    126.         //alert(JSON.stringify(formData["update"]));  
    127.           
    128.         $.ajax({  
    129.             type: "POST",  
    130.             url: "test64.html",  
    131.             data: {formData:formDataStr},  
    132.             async: false,  
    133.             dataType: "json",  
    134.             success: function(data){  
    135.                 if(data){  
    136.                     alert("保存成功");  
    137.                 }  
    138.                   
    139.             }  
    140.         });  
    141.           
    142.         /*****保存成功之后执行如下操作********/  
    143.          $('#grid').omGrid('saveChanges');  
    144.         /******或者执行$('#grid').omGrid('reload');***/  
    145.     });  
    146.       
    147.     $('#query').bind('click'function(e) {  
    148.          var qUserName=$('#qUserName').val();  
    149.          if(qUserName===""){ //没要有查询条件,要显示全部数据  
    150.              $('#grid').omGrid("setData"'test62.html');  
    151.          }else//有查询条件,显示查询数据  
    152.              $('#grid').omGrid("setData"'test62.html?qUserName='+encodeURI(qUserName));  
    153.          }  
    154.     });  
    155.       
    156. });  

     

    从上往下依次是:验证、表格渲染、添加、删除、保存、查询

    4.后台

    1)显示列表,查询

    看到列表渲染部分

    Js代码  收藏代码
    1. dataSource : 'test62.html'  

     调用了后台方法为  test62.html,后台代码:

    Java代码  收藏代码
    1. /** 
    2.      *测试operamasks-ui 列表 
    3.      */  
    4.     @At("/test62")  
    5.     @Ok("json")  
    6.     public GridDataModel<User> test62(){  
    7.         String startStr = getRequest().getParameter("start");  
    8.         String limitStr = getRequest().getParameter("limit");  
    9.         int start = Integer.parseInt(startStr);  
    10.         int limit = Integer.parseInt(limitStr);  
    11.         if(start==0){  
    12.             start=1;  
    13.         }  
    14.           
    15.         Cnd cnd = null;  
    16.         String qUserName = getRequest().getParameter("qUserName");  
    17.         if(null != qUserName){  
    18.             cnd = Cnd.where("userName""like""%"+qUserName+"%");  
    19.         }  
    20.           
    21.         int pagesize = (start/limit)+1;//当前页  
    22.         QueryResult qr = serviceManager.getUserService().query(cnd,pagesize,limit);  
    23.           
    24.           
    25.         GridDataModel<User> gdm = new GridDataModel<User>();  
    26.         gdm.setTotal(qr.getPager().getRecordCount());  
    27.         gdm.setRows((List<User>)qr.getList());  
    28.           
    29.         return gdm;  
    30.     }  

     

    这里传给前台一个  GridDataModel  的 json 格式数据,GridDataModel  的代码:

    Java代码  收藏代码
    1. public class GridDataModel<T> {  
    2.     // 显示的总数  
    3.     private int total;  
    4.     // 行数据  
    5.     private List<T> rows = new ArrayList<T>();  
    6.       
    7.     public List<T> getRows() {  
    8.         return rows;  
    9.     }  
    10.   
    11.     public void setRows(List<T> rows) {  
    12.         this.rows = rows;  
    13.     }  
    14.   
    15.     public int getTotal() {  
    16.         return total;  
    17.     }  
    18.   
    19.     public void setTotal(int total) {  
    20.         this.total = total;  
    21.     }  
    22.   
    23. }  

     

    此方法是进入列表和查询功能

    输入姓名点击查询就可以进行模糊查询:


    2)删除

    点击页面上的删除,只是调用了页面的omGrid进行删除行,没有去后台操作,要点击保存修改后才起作用

    所以请看后面保存修改的代码。

    3)新增

    点击页面的新增,会调用:

    Js代码  收藏代码
    1. url: "test65.html"  

    先查看下源码:

    Java代码  收藏代码
    1. /** 
    2.      *获取新增ID 
    3.      */  
    4.     @At("/test65")  
    5.     @Ok("raw")  
    6.     public String test65(){  
    7.         String result = "";  
    8.         long maxId = serviceManager.getUserService().getMaxId();  
    9.         result = "{\"flag\":true,\"id\":" + (maxId+1) + "}";  
    10.         return result;  
    11.     }  

     

    获取user表的下一个ID;

    为了简单,我自己手动拼了一个json数据返回到前台;

    4)保存修改

    前台调用了:

    Js代码  收藏代码
    1. url: "test64.html"  

     传的数据:

    Js代码  收藏代码
    1. var formData = $('#grid').omGrid('getChanges');  
    2. var formDataStr = JSON.stringify(formData);  
    3. ...  
    4. data: {formData:formDataStr}  

     前台把json对象变成字符串传到后台,下面是后台代码:

    Java代码  收藏代码
    1. /** 
    2.      *保存数据 
    3.      */  
    4.     @At("/test64")  
    5.     @Ok("json")  
    6.     public boolean test64(){  
    7.         String formData = getRequest().getParameter("formData");  
    8.         log.debug("表格更改数据:" + formData);  
    9.         Map<String,Object> map = (Map<String,Object>)Json.fromJson(formData);  
    10.           
    11.         //更新列表  
    12.         List<Map<String,Object>> updateList = (List<Map<String,Object>>)map.get("update");  
    13.         List<User> uList = Json.fromJsonAsList(User.class, Json.toJson(updateList));  
    14.         for (int i = 0; i < uList.size(); i++) {  
    15.             serviceManager.getUserService().update(uList.get(i));  
    16.         }  
    17.           
    18.         //新增列表  
    19.         List<Map<String,Object>> insertList = (List<Map<String,Object>>)map.get("insert");  
    20.         uList = Json.fromJsonAsList(User.class, Json.toJson(insertList));  
    21.         for (int i = 0; i < uList.size(); i++) {  
    22.             serviceManager.getUserService().insert(uList.get(i));  
    23.         }  
    24.           
    25.         //删除列表  
    26.         List<Map<String,Object>> deleteList = (List<Map<String,Object>>)map.get("delete");  
    27.         uList = Json.fromJsonAsList(User.class, Json.toJson(deleteList));  
    28.         for (int i = 0; i < uList.size(); i++) {  
    29.             serviceManager.getUserService().delete(uList.get(i));  
    30.         }  
    31.           
    32.         return true;  
    33.     }  

     

    ===================================================

    看了几天operamasks-ui,就写了这么点东西。。。

  • 相关阅读:
    AcWing 125. 耍杂技的牛
    AcWing 148. 合并果子
    AcWing 907. 区间覆盖
    AcWing 908. 最大不相交区间数量
    AcWing 906. 区间分组
    AcWing 905. 区间选点
    AcWing 285. 没有上司的舞会
    AcWing 1049. 大盗阿福
    AcWing 901. 滑雪
    AcWing 91. 最短Hamilton路径
  • 原文地址:https://www.cnblogs.com/kms1989/p/2640517.html
Copyright © 2020-2023  润新知