Jqgrid+Spring实现的增删改查(一)

来源:互联网 发布:房卡麻将源码搭建教程 编辑:程序博客网 时间:2024/05/29 16:10


一 View

[html] view plain copy
  1. <%@ page language="java" contentType="text/html; charset=utf-8"  
  2.     pageEncoding="utf-8"%>  
  3. <%@ include file="/resources/common/include/header.jsp" %>  
  4.       
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  6. <html>  
  7. <head>  
  8. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
  9. <title>jqgrid demo</title>  
  10. <!-- JQuery CSS -->  
  11. <link rel="stylesheet" href="${basePath}/resources/plugin/jquery-ui-themes-1.8.14/themes/redmond/jquery-ui.css" type="text/css" />  
  12. <!-- jqGrid CSS -->  
  13. <link rel="stylesheet" href="${basePath}/resources/plugin/jqGrid-4.5.4/css/ui.jqgrid.css" type="text/css" />  
  14. <!-- The actual JQuery code -->  
  15. <script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js" ></script>  
  16. <!-- The JQuery UI code -->  
  17. <script type="text/javascript" src="http://code.jquery.com/ui/1.10.3/jquery-ui.min.js"></script>  
  18. <!-- The jqGrid language file code-->  
  19. <script type="text/javascript" src="${basePath}/resources/plugin/jqGrid-4.5.4/js/i18n/grid.locale-cn.js"></script>  
  20. <!-- The atual jqGrid code -->  
  21. <script type="text/javascript" src="${basePath}/resources/plugin/jqGrid-4.5.4/js/jquery.jqGrid.src.js"></script>  
  22.   
  23. <script type="text/javascript">  
  24. $(function(){  
  25.     $("#gridTable").jqGrid({  
  26.            url: "${basePath}/itCrud/list",  
  27.         datatype: "json",  
  28.         mtype : "post",  
  29.         height: 250,  
  30.         colNames:['Inv No','Date', 'Client', 'Amount','Tax','Total','Notes'],  
  31.         colModel:[  
  32.                     {name:'id',index:'id', width:55, editable:true, editoptions:{readonly:true}, sorttype:'int'},  
  33.                         {name:'invdate',index:'invdate', width:90, editable:true},  
  34.                         {name:'name',index:'name asc, invdate', width:100,editable:true},  
  35.                         {name:'amount',index:'amount', width:80, align:"right",editable:true,editrules:{number:true},sorttype:'number',formatter:'number'},  
  36.                         {name:'tax',index:'tax', width:80, align:"right",editable:true,editrules:{number:true},sorttype:'number',formatter:'number'},  
  37.                         {name:'total',index:'total', width:80,align:"right",editable:true,editrules:{number:true},sorttype:'number',formatter:'number'},  
  38.                         {name:'note',index:'note', width:150, sortable:false,editable:true}  
  39.                     ],  
  40.         sortname:'id',  
  41.         sortorder:'asc',  
  42.         /*editurl: 'server.php', */  
  43.         viewrecords:true,  
  44.         rowNum:10,  
  45.         rowList:[10,20,30],  
  46.         prmNames : {    
  47.             search : "search"    
  48.         },  
  49.         jsonReader : {    
  50.             root : "rows",  
  51.             page: "page",  
  52.             total: "total",  
  53.             records : "records",   
  54.             repeatitems : false  
  55.         },  
  56.         pager:"#gridPager",  
  57.         caption: "jqgrid CRUD demo",  
  58.         hidegrid : false  
  59.     });  
  60.       
  61.     $('#gridTable').jqGrid('navGrid','#gridPager',{  
  62.            refresh:true,   
  63.            edit:true,  
  64.            add:true,  
  65.            del:true,  
  66.            search:false,  
  67.            addfunc:openDialog4Adding,  
  68.            editfunc:openDialog4Updating,  
  69.            delfunc:openDialog4Deleting  
  70.        });  
  71.       
  72.     //配置对话框  
  73.    $("#consoleDlg").dialog({  
  74.        autoOpen:false,  
  75.        modal:true      //设置对话框为模态对话框  
  76.   
  77.    });  
  78.       
  79. });  
  80.   
  81. var openDialog4Adding = function() {  
  82.     var consoleDlg = $("#consoleDlg");      
  83. //    var dialogButtonPanel = consoleDlg.siblings(".ui-dialog-buttonpane");      
  84.     consoleDlg.find("input").removeAttr("disabled").val("");      
  85. //    dialogButtonPanel.find("button:not(:contains('取消'))").hide();      
  86. //    dialogButtonPanel.find("button:contains('新增')").show();      
  87.     consoleDlg.dialog({  
  88.         title:"新增",  
  89.         resizable:false,  
  90.         width:480,  
  91.         buttons:{  
  92.            "取消":function(){  
  93.                $("#consoleDlg").dialog("close");  
  94.            },  
  95.            "新增":addItem  
  96.        }  
  97.         });  
  98.     consoleDlg.dialog("open");  
  99. };  
  100.   
  101. var openDialog4Updating = function() {    
  102.        var consoleDlg = $("#consoleDlg");      
  103.     //   var dialogButtonPanel = consoleDlg.siblings(".ui-dialog-buttonpane");      
  104.        consoleDlg.find("input").removeAttr("disabled");      
  105.     /*    dialogButtonPanel.find("button:not(:contains('取消'))").hide();      
  106.        dialogButtonPanel.find("button:contains('修改')").show();    */   
  107.          
  108.        consoleDlg.dialog({  
  109.         title:"修改",  
  110.         resizable:false,  
  111.             width:480,  
  112.             buttons:{  
  113.                "取消":function(){  
  114.                    $("#consoleDlg").dialog("close");  
  115.                },  
  116.                "修改":editItem  
  117.            }  
  118.         });  
  119.          
  120.        loadSelectedRowData();  
  121.        consoleDlg.dialog("open");  
  122.          
  123.     };  
  124.   
  125. var openDialog4Deleting = function() {      
  126.        var consoleDlg = $("#consoleDlg");      
  127.     //   var dialogButtonPanel = consoleDlg.siblings(".ui-dialog-buttonpane");      
  128.        consoleDlg.find("input").attr("disabled", true);  
  129.        /*   
  130.        dialogButtonPanel.find("button:not(:contains('取消'))").hide();      
  131.        dialogButtonPanel.find("button:contains('删除')").show();      
  132.        consoleDlg.dialog("option", "title", "delete record");  
  133.         */  
  134.           
  135.         consoleDlg.dialog({  
  136.             title:"删除",  
  137.             resizable:false,  
  138.                 width:480,  
  139.                 buttons:{  
  140.                    "取消":function(){  
  141.                        $("#consoleDlg").dialog("close");  
  142.                    },  
  143.                    "删除":deleteItem  
  144.                }  
  145.             });  
  146.        loadSelectedRowData();  
  147.        consoleDlg.dialog("open");  
  148.     };  
  149.   
  150. var loadSelectedRowData = function(){  
  151.     //2016-03-18 当前选中的行  
  152.     var selectedRowId = $("#gridTable").jqGrid("getGridParam", "selrow");  
  153.     //获得当前行各项属性  
  154.     var rowData = $("#gridTable").jqGrid("getRowData",selectedRowId);  
  155.           
  156.     if (!selectedRowId) {    
  157.         alert("请先选择需要编辑的行!");      
  158.         return false;  
  159.     } else {  
  160.         var consoleDlg = $("#consoleDlg");    
  161.           
  162.         consoleDlg.find("#selectId").val(rowData.id);      
  163.         consoleDlg.find("#invdate").val(rowData.invdate);      
  164.         consoleDlg.find("#name").val(rowData.name);  
  165.         consoleDlg.find("#amount").val(rowData.amount);  
  166.         consoleDlg.find("#tax").val(rowData.tax);      
  167.         consoleDlg.find("#total").val(rowData.total);      
  168.         consoleDlg.find("#note").val(rowData.note);  
  169.           
  170.     }  
  171. };  
  172.   
  173. var openDialog4Deleting = function() {      
  174.        var consoleDlg = $("#consoleDlg");      
  175.     //   var dialogButtonPanel = consoleDlg.siblings(".ui-dialog-buttonpane");      
  176.        consoleDlg.find("input").attr("disabled", true);  
  177.        /*   
  178.        dialogButtonPanel.find("button:not(:contains('取消'))").hide();      
  179.        dialogButtonPanel.find("button:contains('删除')").show();      
  180.        consoleDlg.dialog("option", "title", "delete record");  
  181.         */  
  182.           
  183.         consoleDlg.dialog({  
  184.             title:"删除",  
  185.             resizable:false,  
  186.                 width:480,  
  187.                 buttons:{  
  188.                    "取消":function(){  
  189.                        $("#consoleDlg").dialog("close");  
  190.                    },  
  191.                    "删除":deleteItem  
  192.                }  
  193.             });  
  194.        loadSelectedRowData();  
  195.        consoleDlg.dialog("open");  
  196.     };  
  197.   
  198. var addItem = function(){  
  199.     var consoleDlg = $("#consoleDlg");  
  200.       
  201.     var invdate = $.trim(consoleDlg.find("#invdate").val());    
  202.     var name = $.trim(consoleDlg.find("#name").val());    
  203.     var amount = $.trim(consoleDlg.find("#amount").val());    
  204.     var tax = $.trim(consoleDlg.find("#tax").val());    
  205.     var total = $.trim(consoleDlg.find("#total").val());    
  206.     var note = $.trim(consoleDlg.find("#note").val());  
  207.       
  208.     var params = {    
  209.             "invdate" : invdate,    
  210.             "name" : name,    
  211.             "amount" : amount,    
  212.             "tax" : tax,    
  213.             "total" : total,    
  214.             "note" : note  
  215.     };  
  216.       
  217.     $.ajax({  
  218.         url:"${basePath}/itCrud/add",  
  219.         data : params,  
  220.         dataType : "json",  
  221.         cache : false,  
  222.         success : function(response, textStatus) {      
  223.             /* alert("id123-->" + response.id + "; message-->" + response.message); */  
  224.             if (response.message == true) {  
  225.                 var dataRow = {    
  226.                     id : response.id,    //从server端获得系统分配的id    
  227.                     invdate : invdate,    
  228.                     name : name,    
  229.                     amount : amount,    
  230.                     tax : tax,    
  231.                     total : total,    
  232.                     note : note    
  233.                 };  
  234.                     
  235.                 /*     
  236.                 var srcrowid = $("#gridTable").jqGrid("getGridParam",      
  237.                         "selrow");       
  238.                 */    
  239.                       
  240.                 $("#gridTable").jqGrid("addRowData",      
  241.                         response.id, dataRow, "last");    //将新行插入到末尾    
  242.                     
  243.                 consoleDlg.dialog("close");    
  244.                 alert("添加成功!");    
  245.             }else{  
  246.                 alert("添加失败!");  
  247.             }  
  248.         },  
  249.         error : function(textStatus, e) {      
  250.             alert("系统ajax交互错误: " + textStatus);    
  251.         }  
  252.     });  
  253. };  
  254.   
  255. var editItem = function(){  
  256.     var consoleDlg = $("#consoleDlg");  
  257.     var id = $.trim(consoleDlg.find("#selectId").val());   
  258.     var tempInvdate = $.trim(consoleDlg.find("#invdate").val());  
  259.     var invdate = tempInvdate.substring(0,10);  
  260.     var name = $.trim(consoleDlg.find("#name").val());    
  261.     var amount = $.trim(consoleDlg.find("#amount").val());    
  262.     var tax = $.trim(consoleDlg.find("#tax").val());    
  263.     var total = $.trim(consoleDlg.find("#total").val());    
  264.     var note = $.trim(consoleDlg.find("#note").val());  
  265.       
  266.     var params = {    
  267.             "id" : id,  
  268.             "invdate" : invdate,    
  269.             "name" : name,    
  270.             "amount" : amount,    
  271.             "tax" : tax,    
  272.             "total" : total,    
  273.             "note" : note  
  274.     };  
  275.       
  276.     $.ajax({  
  277.         url:"${basePath}/itCrud/edit",  
  278.         data : params,  
  279.         dataType : "json",  
  280.         cache : false,  
  281.         success : function(response, textStatus) {      
  282. //          alert("id-->" + response.id + "; message-->" + response.message);  
  283.             if (response.message == true) {  
  284.                 var dataRow = {    
  285.                     selectId : id,  
  286.                     invdate : invdate,    
  287.                     name : name,    
  288.                     amount : amount,    
  289.                     tax : tax,    
  290.                     total : total,    
  291.                     note : note    
  292.                 };  
  293.                   
  294.                 /*     
  295.                 var srcrowid = $("#gridTable").jqGrid("getGridParam",      
  296.                         "selrow");       
  297.                 */  
  298.                       
  299.                 //将表格中对应记录更新一下  
  300.                 $("#gridTable").jqGrid("setRowData", id, dataRow);  
  301.                     
  302.                 consoleDlg.dialog("close");  
  303.                 alert("修改成功!");  
  304.             }else{  
  305.                 alert("修改失败!");  
  306.             }  
  307.         },  
  308.         error : function(textStatus, e) {      
  309.             alert("系统ajax交互错误: " + textStatus);    
  310.         }  
  311.     });  
  312. }  
  313.   
  314. var deleteItem = function(){  
  315.     var consoleDlg = $("#consoleDlg");  
  316.     var id = $.trim(consoleDlg.find("#selectId").val());  
  317.     var tempInvdate = $.trim(consoleDlg.find("#invdate").val());  
  318.     var invdate = tempInvdate.substring(0,10);  
  319.     var name = $.trim(consoleDlg.find("#name").val());    
  320.     var amount = $.trim(consoleDlg.find("#amount").val());    
  321.     var tax = $.trim(consoleDlg.find("#tax").val());    
  322.     var total = $.trim(consoleDlg.find("#total").val());    
  323.     var note = $.trim(consoleDlg.find("#note").val());  
  324.       
  325.     var params = {    
  326.             "id" : id,  
  327.             "invdate" : invdate,    
  328.             "name" : name,    
  329.             "amount" : amount,    
  330.             "tax" : tax,    
  331.             "total" : total,    
  332.             "note" : note  
  333.     };  
  334.       
  335.     $.ajax({  
  336.         url:"${basePath}/itCrud/delete",  
  337.         data : params,  
  338.         dataType : "json",  
  339.         cache : false,  
  340.         success : function(response, textStatus) {      
  341. //          alert("id-->" + response.id + "; message-->" + response.message);  
  342.             if (response.message == true) {  
  343.                 $("#gridTable").jqGrid("delRowData", id);   
  344.                     
  345.                 consoleDlg.dialog("close");  
  346.                 alert("删除成功!");  
  347.             }else{  
  348.                 alert("删除失败!");  
  349.             }  
  350.         },  
  351.         error : function(textStatus, e) {      
  352.             alert("系统ajax交互错误: " + textStatus);    
  353.         }  
  354.     });  
  355.       
  356. }  
  357.   
  358. </script>  
  359. </head>  
  360. <body>  
  361.     <table id="gridTable"></table>  
  362.     <div id="gridPager"></div>  
  363.       
  364.     <div id="consoleDlg" style="display:none">  
  365.         <form id="consoleForm">  
  366.             <input type="hidden" id="selectId"/>  
  367.             <table class="formTable">  
  368.                 <tr>  
  369.                     <th>Date</th>  
  370.                     <td><input type="text" class="textField" id="invdate" name="invdate" />  
  371.                     </td>  
  372.                 </tr>  
  373.                 <tr>  
  374.                     <th>Client</th>  
  375.                     <td><input type="text" class="textField" id="name" name="name" />  
  376.                     </td>  
  377.                 </tr>  
  378.                 <tr>  
  379.                     <th>Amount</th>  
  380.                     <td><input type="text" class="textField" id="amount" name="amount" />  
  381.                     </td>  
  382.                 </tr>  
  383.                 <tr>  
  384.                     <th>Tax</th>  
  385.                     <td><input type="text" class="textField" id="tax" name="tax" />  
  386.                     </td>  
  387.                 </tr>  
  388.                 <tr>  
  389.                     <th>Total</th>  
  390.                     <td><input type="text" class="textField" id="total" name="total" />  
  391.                     </td>  
  392.                 </tr>  
  393.                 <tr>  
  394.                     <th>Notes</th>  
  395.                     <td><input type="text" class="textField" id="note" name="note" />  
  396.                     </td>  
  397.                 </tr>  
  398.             </table>  
  399.         </form>  
  400.     </div>  
  401. </body>  
  402. </html>  


二 Model

[java] view plain copy
  1. package com.yangw.demo.pojo;  
  2.   
  3. import com.yangw.demo.base.BasePojo;  
  4.   
  5. public class Item extends BasePojo {  
  6.       
  7.     private static final long serialVersionUID = 1L;  
  8.     private int id;  
  9.     private String invdate;  
  10.     private String name;  
  11.     private double amount;  
  12.     private double tax;  
  13.     private double total;  
  14.     private String note;  
  15.       
  16.     public int getId() {  
  17.         return id;  
  18.     }  
  19.     public void setId(int id) {  
  20.         this.id = id;  
  21.     }  
  22.     public String getInvdate() {  
  23.         return invdate;  
  24.     }  
  25.     public void setInvdate(String invdate) {  
  26.         this.invdate = invdate;  
  27.     }  
  28.     public String getName() {  
  29.         return name;  
  30.     }  
  31.     public void setName(String name) {  
  32.         this.name = name;  
  33.     }  
  34.     public double getAmount() {  
  35.         return amount;  
  36.     }  
  37.     public void setAmount(double amount) {  
  38.         this.amount = amount;  
  39.     }  
  40.     public double getTax() {  
  41.         return tax;  
  42.     }  
  43.     public void setTax(double tax) {  
  44.         this.tax = tax;  
  45.     }  
  46.     public double getTotal() {  
  47.         return total;  
  48.     }  
  49.     public void setTotal(double total) {  
  50.         this.total = total;  
  51.     }  
  52.     public String getNote() {  
  53.         return note;  
  54.     }  
  55.     public void setNote(String note) {  
  56.         this.note = note;  
  57.     }  
  58.       
  59.       
  60. }  


三 Action

1 MediatorController

[java] view plain copy
  1. @Controller  
  2. @RequestMapping("/main")  
  3. public class MediatorController {  
  4.     @RequestMapping(value = "/items", method = RequestMethod.GET)  
  5.     public String getItemPage(){  
  6.         return "listView";  
  7.     }  
  8.   
  9. }  


2 JqDemoController

[java] view plain copy
  1. @Controller  
  2. @RequestMapping(value={"/itCrud"})  
  3. public class JqDemoController extends BaseController {  
  4.     @Autowired  
  5.     private IItemService<Item, Integer> itemService;  
  6.     private List<Item> dataList;  
  7.   
  8.     @RequestMapping(value={"/list"})  
  9.     public @ResponseBody DataResponse<Item> showList(  
  10.             Item item,  
  11.             @RequestParam(defaultValue="1",value="page") String page,  
  12.             @RequestParam(defaultValue="10",value="rows") String rows  
  13.               
  14.             ){  
  15.         int records;     //总记录数  
  16.         int totalPages;  //总页数  
  17.         int pageSize = StringUtils.isEmpty(rows) ? 10 : Integer.valueOf(rows);  //每页显示记录数  
  18.         int currPage = StringUtils.isEmpty(page) ? 1 : Integer.valueOf(page); //当前页码  
  19.         DataResponse<Item> response = new DataResponse<Item>();  
  20.           
  21.         try {  
  22.             records = itemService.getEntityCount(item);  
  23.             totalPages = (records + pageSize -1) / pageSize;  
  24.             int start = pageSize * (currPage - 1) + 1;  
  25.             start = (start < 0) ? 0 : start;  
  26.             int stop = currPage * pageSize;  
  27.             item.setStart(start);  
  28.             item.setStop(stop);  
  29.             dataList = itemService.searchEntityList(item);  
  30.               
  31.             response.setRecords(String.valueOf(records));  
  32.             response.setTotal(String.valueOf(totalPages));  
  33.             response.setPage(String.valueOf(currPage));  
  34.             response.setRows(dataList);  
  35.               
  36.               
  37.               
  38.         } catch (Exception e) {  
  39.             // TODO Auto-generated catch block  
  40.             e.printStackTrace();  
  41.         }  
  42.           
  43.         return response;  
  44.           
  45.     }  
  46.       
  47.     @RequestMapping(value={"/add"})  
  48.     public @ResponseBody ResultResponse add(Item item) throws Exception{  
  49.         ResultResponse response = new ResultResponse();  
  50.         try {  
  51.             System.out.println(item);  
  52.             itemService.insertEntity(item);  
  53.               
  54.             response.setId(100);  
  55.             response.setMessage(true);  
  56.               
  57.               
  58.               
  59.         } catch (Exception e) {  
  60.             // TODO Auto-generated catch block  
  61.             e.printStackTrace();  
  62.             response.setMessage(false);  
  63.             throw e;  
  64.         }  
  65.           
  66.         return response;  
  67.           
  68.     }  
  69.       
  70.     @RequestMapping(value={"/edit"})  
  71.     public @ResponseBody ResultResponse edit(Item item) throws Exception{  
  72.         ResultResponse response = new ResultResponse();  
  73.           
  74.         try {  
  75.             System.out.println(item);  
  76.             itemService.updateEntity(item);  
  77.   
  78.             response.setMessage(true);  
  79.               
  80.               
  81.         } catch (Exception e) {  
  82.             // TODO Auto-generated catch block  
  83.             e.printStackTrace();  
  84.             response.setMessage(false);  
  85.             throw e;  
  86.         }  
  87.           
  88.         return response;  
  89.     }  
  90.       
  91.     @RequestMapping(value={"/delete"})  
  92.     public @ResponseBody ResultResponse delete(Item item) throws Exception{  
  93.         ResultResponse response = new ResultResponse();  
  94.           
  95.         try {  
  96.             System.out.println(item);  
  97.             itemService.deleteEntity(item);  
  98.   
  99.             response.setMessage(true);  
  100.               
  101.               
  102.         } catch (Exception e) {  
  103.             // TODO Auto-generated catch block  
  104.             e.printStackTrace();  
  105.             response.setMessage(false);  
  106.             throw e;  
  107.         }  
  108.           
  109.         return response;  
  110.     }  
  111.       
  112.       
  113.       
  114.     public List<Item> getDataList() {  
  115.         return dataList;  
  116.     }  
  117.   
  118.     public void setDataList(List<Item> dataList) {  
  119.         this.dataList = dataList;  
  120.     }  
  121. }  



四 Service

1 BaseService

[java] view plain copy
  1. public interface BaseService<Entity extends Serializable,Query extends Object> {  
  2.     /** 
  3.      * 添加 实体 
  4.      * sqlKey  insertEntity 
  5.      * @param entity 
  6.      * @return 
  7.      * @throws Exception 
  8.      */  
  9.     public Query insertEntity(Entity entity) throws Exception;  
  10.       
  11.     /** 
  12.      * 修改 实体 
  13.      * sqlKey  updateEntity 
  14.      * @param entity 
  15.      * @return 
  16.      * @throws Exception 
  17.      */  
  18.     public int updateEntity(Entity entity) throws Exception;  
  19.       
  20.     /** 
  21.      * 删除 实体 
  22.      * sqlKey  deleteEntityById 
  23.      * @param entity 
  24.      * @return 
  25.      * @throws Exception 
  26.      */  
  27.     public int deleteEntity(Entity entity) throws Exception;  
  28.       
  29.     /** 
  30.      * 根据实体参数查找单个数据 
  31.      * sqlKey  searchEntity 
  32.      * @param sqlMap 
  33.      * @param query 
  34.      * @return 
  35.      * @throws Exception 
  36.      */  
  37.     public Entity searchEntity(Entity entity)throws Exception;  
  38.       
  39.     /** 
  40.      * 查询 实体列表 
  41.      * sqlKey  searchEntityList 
  42.      * @param query 
  43.      * @return 
  44.      * @throws Exception 
  45.      */  
  46.     public List<Entity> searchEntityList(Entity entity) throws Exception;  
  47.       
  48.     /** 
  49.      * 查询总数 
  50.      * @param sqlMap 
  51.      * @param query 
  52.      * @throws Exception 
  53.      */  
  54.     public int getEntityCount(Entity entity) throws Exception;  
  55. }  

2 ItemServiceImpl

[java] view plain copy
  1. @Service  
  2. public class ItemServiceImpl extends BaseServiceSupport<Item, Integer> implements IItemService<Item, Integer> {  
  3.   
  4.     @Resource(name="itemDao")   
  5.     private ItemDao itemDao;  
  6.   
  7. }  

五 Dao层

1 BaseDao

[java] view plain copy
  1. public interface BaseDao<Entity extends Serializable, Query extends Object> {  
  2.     /** 
  3.      * 添加 实体 
  4.      * @param entity 
  5.      * @return 
  6.      * @throws SQLException 
  7.      */  
  8.     public Query insertEntity(Entity entity) throws SQLException;  
  9.       
  10.     /** 
  11.      * 修改 实体 
  12.      * @param entity 
  13.      * @return 
  14.      * @throws SQLException 
  15.      */  
  16.     public int updateEntity(Entity entity) throws SQLException;  
  17.       
  18.     /** 
  19.      * 删除 实体 
  20.      * @param entity 
  21.      * @return 
  22.      * @throws SQLException 
  23.      */  
  24.     public int deleteEntity(Entity entity) throws SQLException;  
  25.       
  26.     /** 
  27.      * 根据实体参数查找单个数据 
  28.      * @param sqlMap 
  29.      * @param query 
  30.      * @return 
  31.      * @throws SQLException 
  32.      */  
  33.     public Entity searchEntity(Entity entity)throws SQLException;  
  34.       
  35.     /** 
  36.      * 查询 实体列表 
  37.      * @param query 
  38.      * @return 
  39.      * @throws SQLException 
  40.      */  
  41.     public List<Entity> searchEntityList(Entity entity) throws SQLException;  
  42.       
  43.     /** 
  44.      * 查询总数 
  45.      * @param sqlMap 
  46.      * @param query 
  47.      * @throws SQLException 
  48.      */  
  49.     public int getEntityCount(Entity entity) throws SQLException;  
  50. }  


六 json

1 DataResponse

[java] view plain copy
  1. public class DataResponse<T> {  
  2.     private String page;       
  3.     private String total;       
  4.     private String records;     
  5.     private List<T> rows;       
  6.     private Map<String, Object> userdata;    
  7.       
  8.     public String getPage() {  
  9.         return page;  
  10.     }  
  11.     public void setPage(String page) {  
  12.         this.page = page;  
  13.     }  
  14.     public String getTotal() {  
  15.         return total;  
  16.     }  
  17.     public void setTotal(String total) {  
  18.         this.total = total;  
  19.     }  
  20.     public String getRecords() {  
  21.         return records;  
  22.     }  
  23.     public void setRecords(String records) {  
  24.         this.records = records;  
  25.     }  
  26.     public List<T> getRows() {  
  27.         return rows;  
  28.     }  
  29.     public void setRows(List<T> rows) {  
  30.         this.rows = rows;  
  31.     }  
  32.     public Map<String, Object> getUserdata() {  
  33.         return userdata;  
  34.     }  
  35.     public void setUserdata(Map<String, Object> userdata) {  
  36.         this.userdata = userdata;  
  37.     }  
  38.       
  39. }  


2 ResultResponse

[java] view plain copy
  1. public class ResultResponse {  
  2.     private boolean message;  
  3.     private Integer id;  
  4.       
  5.       
  6.     public boolean getMessage() {  
  7.         return message;  
  8.     }  
  9.     public void setMessage(boolean message) {  
  10.         this.message = message;  
  11.     }  
  12.       
  13.     public Integer getId() {  
  14.         return id;  
  15.     }  
  16.     public void setId(Integer id) {  
  17.         this.id = id;  
  18.     }  
  19.       
  20.   
  21. }  



七  配置文件

application.xml

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns:mvc="http://www.springframework.org/schema/mvc"  
  5.     xmlns:context="http://www.springframework.org/schema/context"  
  6.     xmlns:tx="http://www.springframework.org/schema/tx"  
  7.     xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
  8.     xmlns:p="http://www.springframework.org/schema/p"  
  9.     xmlns:aop="http://www.springframework.org/schema/aop"  
  10.     xmlns:rabbit="http://www.springframework.org/schema/rabbit"  
  11.     xsi:schemaLocation="http://www.springframework.org/schema/mvc  
  12.         http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd  
  13.         http://www.springframework.org/schema/beans  
  14.         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  15.         http://www.springframework.org/schema/context   
  16.         http://www.springframework.org/schema/context/spring-context-2.5.xsd  
  17.         http://www.springframework.org/schema/tx   
  18.         http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  
  19.         http://code.alibabatech.com/schema/dubbo   
  20.         http://code.alibabatech.com/schema/dubbo/dubbo.xsd  
  21.         http://www.springframework.org/schema/aop  
  22.         http://www.springframework.org/schema/aop/spring-aop-2.5.xsd  
  23.         http://www.springframework.org/schema/rabbit  
  24.         http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd">  
  25.           
  26.    <!-- 外部属性文件 -->  
  27.     <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  28.         <property name="locations">  
  29.             <list>  
  30.                 <value>classpath:jdbc.properties</value>  
  31.             </list>  
  32.         </property>  
  33.     </bean>  
  34.       
  35.     <!-- 扫描注解组件并且自动的注入 -->  
  36.     <context:component-scan base-package="com.XXX.demo" />  
  37.       
  38.     <mvc:annotation-driven/>  
  39.     <!-- 配置静态资源访问目录 -->  
  40.     <mvc:resources mapping="/resources/**" location="/resources/"/>  
  41.       
  42.     <!-- JSP视图解析器 -->  
  43.     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  44.         <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>  
  45.         <property name="prefix" value="/WEB-INF/views/"/>  
  46.         <property name="suffix" value=".jsp"/>  
  47.     </bean>  
  48.   
  49.     <!-- JSON解析器 -->  
  50.     <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">  
  51.         <property name="messageConverters">  
  52.             <list>  
  53.                 <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />  
  54.             </list>  
  55.         </property>  
  56.     </bean>  
  57.       
  58.     <!-- 设置数据源 -->  
  59.     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">  
  60.         <property name="driverClass" value="${jdbc.driverClassName}"/>  
  61.         <!-- 数据库参数配置 -->  
  62.         <property name="jdbcUrl" value="${jdbc.url}"/>  
  63.         <property name="user" value="${jdbc.username}"/>  
  64.         <property name="password" value="${jdbc.password}"/>  
  65.         <property name="minPoolSize" value="${c3p0.miniPoolSize}"/>  
  66.         <property name="maxPoolSize" value="${c3p0.maxPoolSize}"/>  
  67.         <property name="initialPoolSize" value="${c3p0.initialPoolSize}"/>  
  68.         <property name="maxIdleTime" value="${c3p0.maxIdleTime}"/>  
  69.         <!-- 超时20秒 -->  
  70.         <property name="checkoutTimeout" value="${c3p0.checkoutTimeout}"/>  
  71.     </bean>  
  72.       
  73.     <!-- 声明事务为注解驱动 -->  
  74.     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  75.         <property name="dataSource" ref="dataSource" />  
  76.     </bean>  
  77.       
  78.     <tx:advice id="txAdvice" transaction-manager="transactionManager">  
  79.         <tx:attributes>  
  80.             <tx:method name="*" read-only="false" rollback-for="Exception,RuntimeException" propagation="REQUIRED"/>  
  81.         </tx:attributes>  
  82.     </tx:advice>  
  83.   
  84.     <aop:config proxy-target-class="true">  
  85.         <aop:pointcut id="serviceManage" expression="execution(* com.XXX.demo.service..*(..))"/>  
  86.         <aop:advisor pointcut-ref="serviceManage" advice-ref="txAdvice"/>  
  87.     </aop:config>  
  88.        
  89.     <bean id="sqlSessionFactory"  class="org.mybatis.spring.SqlSessionFactoryBean">  
  90.         <property name="dataSource" ref="dataSource" />  
  91.         <property name="configLocation" value="classpath:config/mybatis-config.xml" />  
  92.     </bean>  
  93.       
  94.     <!-- Dao -->  
  95.     <bean id="itemDao" class="org.mybatis.spring.mapper.MapperFactoryBean">       
  96.        <property name="mapperInterface" value="com.XXX.demo.dao.ItemDao" />  
  97.        <property name="sqlSessionFactory" ref="sqlSessionFactory" />  
  98.     </bean>  
  99.       
  100. </beans>  


八  页面效果


http://localhost:8080/springJqgrid/main/items


九 总结

由于;

1 缺少值类型校验

2 缺少页面查询条件输入

所以这个例子离实际的应用还有一段距离。


十 鸣谢

http://krams915.blogspot.com/2010/12/jqgrid-and-spring-3-mvc-integration.html
jqGrid and Spring 3 MVC Integration Tutorial

http://blog.csdn.NET/kakaxi_77/article/details/46671249
Jqgrid+Struts2实现的增删改查

http://gongm-24.iteye.com/blog/1275430
JqGrid4.2实践-2-集成Spring MVC


---------------------------------------------------------------------------

*备注:

①值类型的校验应该使用custom_func,但我试过了,没起作用。目前原因未明。


--------------------------------------------------------------------------

【补充】

2017-05-18 补充了页面条件输入查询


说明:

①输入条件就是在页面加一个div

②js:

[javascript] view plain copy
  1. function searchReload(){  
  2.     var client = $("#client").val();  
  3.     var amount = $("#amount").val();  
  4.       
  5.     $("#gridTable").jqGrid("setGridParam",  
  6.             {  
  7.                 url:"${basePath}/itCrud/list",  
  8.                 mtype: 'POST',  
  9.                 postData:{  
  10.                     client:client,  
  11.                     amount:amount  
  12.                     },  
  13.                 datatype: "json"  
  14.             }).trigger("reloadGrid");  
  15. }  

Description:
setGridParam:是jqGrid中的一个方法,表示设置grid的参数
url:这是grid的参数,表示数据的获取路径。grid中的数据就是通过这个url来获取的
postData:表示参数, 请求url时postData中的参数将会被发送到后台。
trigger: 这也是jqGrid的方法,该方法和setGridParam配合使用可以重新加载grid,$("").setGridParam().trigger("reloadGrid");