• km之路--004 easyui 二


    接上一篇:

    km之路--002 easyui 一

    删除功能

    先写这个功能是因为这个功能比较好做

    对于删除功能而言,首先需要明白的是如下三个问题:

    1. 如何判断是否选中了数据以及选中了几条数据?

    2. 删除一条数据如何做?

    3. 删除多条数据如何做?以及是否需要支持翻页选择的多条数据的删除?如果需要支持,如何做?

    singleSelect属性

    这个属性的解释为:如果为true,则只允许选择一行。默认为false。

    也就是说默认是支持多行选择的。这里暂且不考虑只能选择一行的情况

    删除按钮状态

    在真正实现删除功能之前,先考虑一个小问题:delete按钮是否随时都是可点击状态的?即:

    1. 先把删除按钮设置为disabled,当选中数据的时候再把删除按钮设置为可用

    2. 删除按钮始终可点击,当点击删除按钮时,再去判断是否选中了数据,如果选中了,则进行删除操作,反之则提醒用户先选中数据

    我选择第二种方式。

    原因:选中数据不仅仅是选中一行或多行,也不仅仅是单击与双击,还有可能是选择datagrid前面的checkbox,或者选中的是一个单元格,又或者是支持键盘操作的datagrid。先不论键盘操作,单是如下四个事件处理起来就很麻烦了:

    所以我选择比较简单的第二种方式【当然,主要是我比较菜】

    合并问题

    其实完全可以把删除一行的功能放到删除多行中进行。因为删除一行只是删除多行的特殊情况。

    翻页选择

    这样我们就只剩下一个问题了:是否支持翻页选择?如果需要支持,如何做?

    根据如下博客:

    关于easyui的datagrid翻页保存选中项 http://blog.csdn.net/li1441009033/article/details/40825267

    可以得知只要设置了idField属性,就可以支持翻页选择了。既然如此,那么问题来了:支持翻页选择是否有必要?我倾向于没有必要。如果需要大批量的删除数据,我们可以直接做一个大批量删除数据的功能,没有必要进行一页一页的查找、选择、删除这样的操作。

     

    删除功能实现

    ===流程

    在前面的快速例子的基础上

    1. 把student/list.html中的idField属性删除

    2. 添加删除按钮的handler实现

      2.1 判断是否已经选择数据

        2.1.1 如果没有选择数据,则提示用户选择数据

        2.1.2 如果已经选择数据,则进行删除操作

          2.1.2.1 把所选择数据的ID拼接起来,形如:1,2,3

          2.1.2.2 请求后台

          2.1.2.3 根据后台返回结果进行相应提示 

          2.1.2.4 reload datagrid     

    3. 实现后台批量功能

    ===后台功能实现

    ===>>===controller

     1 /**
     2  * 根据ID列表批量删除,参数规则为id1,id2,id3,...
     3  * @param ids 待删除对象的ID列表
     4  * @return 业务状态信息描述对象。
     5  * @see com.laolang.easyui.pojo.EasyuiResult 
     6  */
     7 @RequestMapping(value = "delete/ids",method = RequestMethod.POST, produces = "application/json; charset=utf-8")
     8 public ResponseEntity<EasyuiResult> delete(@RequestParam(value="ids") String ids){
     9     EasyuiResult easyuiResult = new EasyuiResult();
    10     try {
    11         List<Object> idList = KMStringUtils.getIdsStringArray(ids);
    12         Integer result = studentService.deleteByIds(Student.class, "id", idList);
    13         if( 0 >= result ) {
    14             easyuiResult.changeToFailed();
    15         }
    16         return ResponseEntity.ok(easyuiResult);
    17     }catch (Exception e) {
    18         e.printStackTrace();
    19     }
    20     easyuiResult.changeError();
    21     return ResponseEntity.status(HttpStatus.SC_INTERNAL_SERVER_ERROR).body(easyuiResult);
    22 }

    ===>>===EasyuiResult

     1 package com.laolang.easyui.one.pojo;
     2 
     3 public class EasyuiResult {
     4 
     5     public EasyuiResult() {
     6         this.code = CODE_SUCCESS;
     7         this.desc = DESC_SUCCESSS;
     8     }
     9 
    10     public void changeToSuccess() {
    11         this.code = CODE_SUCCESS;
    12         this.desc = DESC_SUCCESSS;
    13     }
    14 
    15     public void changeToFailed() {
    16         this.code = CODE_FAILED;
    17         this.desc = DESC_FAILED;
    18     }
    19     
    20     public void changeError() {
    21         this.code = CODE_ERROR;
    22         this.desc = DESC_ERROR;
    23     }
    24 
    25     @Override
    26     public String toString() {
    27         return "EasyuiResult [code=" + code + ", desc=" + desc + "]";
    28     }
    29 
    30     public Integer getCode() {
    31         return code;
    32     }
    33 
    34     public void setCode(Integer code) {
    35         this.code = code;
    36     }
    37 
    38     public String getDesc() {
    39         return desc;
    40     }
    41 
    42     public void setDesc(String desc) {
    43         this.desc = desc;
    44     }
    45 
    46     public static final Integer CODE_SUCCESS = 200;
    47 
    48     public static final Integer CODE_FAILED = 300;
    49 
    50     public static final Integer CODE_ERROR = 400;
    51 
    52     public static final String DESC_SUCCESSS = "success";
    53 
    54     public static final String DESC_FAILED = "failed";
    55 
    56     public static final String DESC_ERROR = "error";
    57 
    58     /**
    59      * 业务状态码 <br />
    60      * 200 : 执行成功<br />
    61      * 300 : 执行失败<br />
    62      * 400 : 出错
    63      */
    64     private Integer code;
    65 
    66     /**
    67      * 业务状态描述<br />
    68      * success : 执行成功<br />
    69      * failed : 执行失败<br />
    70      * error : 出错 
    71      * 
    72      */
    73     private String desc;
    74 }

    具体的Service代码与KMStringUtils.getIdsStringArray方法不再列出

    ===前台 

    ===>>===删除按钮实现

     1 {
     2 text: '删除',
     3 iconCls: 'icon-remove',
     4 handler: function() {
     5     var rowsSelected = $('#studentListTable').datagrid('getSelections');
     6     if (rowsSelected.length <= 0) {
     7         $.messager.alert('提示', '请至少选择一条数据!');
     8         return;
     9     }
    10     for (var i = 0, idArray = []; i < rowsSelected.length; i++) {
    11         idArray[i] = rowsSelected[i].id;
    12     }
    13     var ids = idArray.join();
    14     $.ajax({
    15         url: SM.url.student.deleteids,
    16         type: 'post',
    17         data: 'ids=' + ids,
    18         dataType: 'json',
    19         success: function(msg) {
    20             var result = SM.judgeEasyuiResult.judge(msg);
    21             if (result.success) {
    22                 $.messager.show({
    23                     title: '提示',
    24                     msg: '删除成功!',
    25                     timeout: 3000,
    26                     showType: 'slide'
    27                 });
    28             } else if (result.failed) {
    29                 $.messager.show({
    30                     title: '提示',
    31                     msg: '删除失败!',
    32                     timeout: 3000,
    33                     showType: 'slide'
    34                 });
    35             } else if (result.error) {
    36                 $.messager.show({
    37                     title: '提示',
    38                     msg: '未知错误!',
    39                     timeout: 3000,
    40                     showType: 'slide'
    41                 });
    42             }
    43             $('#studentListTable').datagrid('reload');
    44         }
    45     });
    46 }
    47 }

    ===>>===SM.judgeEasyuiResult.judge

     1 judgeEasyuiResult: {
     2     result : {
     3         success : false,
     4         failed : false,
     5         error : false
     6     },
     7     judge: function (msg) {
     8         SM.judgeEasyuiResult.result.success = false;
     9         SM.judgeEasyuiResult.result.failed = false;
    10         SM.judgeEasyuiResult.result.error = false;
    11         if( 200 === msg.code ){
    12             SM.judgeEasyuiResult.result.success = true;
    13         }else if( 300 === msg.code){
    14             SM.judgeEasyuiResult.result.failed = true;
    15         }else if( 400 === msg.code ){
    16             SM.judgeEasyuiResult.result.error = true;
    17         }
    18         return SM.judgeEasyuiResult.result;
    19     }
    20 }

    复杂查询

    什么叫复杂查询呢?简而言之,我认为就是查询条件有不确定性、多样性。一个实际的例子,比如当当图书的高级查询:

    那么针对到我们这个小demo中,如果要做复杂查询,只有一个表显示是不太够的,我们还需要如下两个表:

    tb_classes : 班级表

    tb_score : 成绩表

    正常来说,班级信息与成绩信息都是要从数据库查询的,不过这里只做一个示意,暂时不做这两个表,因为我并不是实现完整的学生管理的功能。

    查询条件暂时包括所属班级与性别两个条件。

    实现

    ===前台代码

    ===>>===修改复杂查询面板

     1 <div region="north" title="复杂查询" data-options="height:60,collapsible:false,collapsed:false">
     2     <select name="sex" id="sexSelect" class="easyui-combobox" data-options="panelHeight:'auto'" style="100px;">
     3         <option>---</option>
     4         <option value="MAIL"></option>
     5         <option value="FAMAIL"></option>
     6     </select>
     7     <select name="classesId" id="classesSelect" class="easyui-combobox" data-options="panelHeight:'auto'" style="100px;">
     8         <option>---</option>
     9         <option value="1">一班</option>
    10         <option value="2">二班</option>
    11         <option value="3">三班</option>
    12         <option value="4">四班</option>
    13     </select>
    14     <a id="stuSearchBtn" href="#" class="easyui-linkbutton" data-options="iconCls:'icon-search'">查询</a>
    15 </div>

    ===>>===查询按钮功能实现

     1 $('#stuSearchBtn').linkbutton({
     2     onClick: function() {
     3         
     4         var sex = null;
     5         var classesId = null;
     6         var param = {};
     7         sex = $('#sexSelect').combobox('getValue');
     8         classesId = $('#classesSelect').combobox('getValue');
     9         if( '---' != sex ){
    10             param.sex = sex;
    11         }
    12         if( '---' != classesId ){
    13             param.classesId = classesId;
    14         }
    15         
    16         
    17         console.log('sex:'+sex+'  classedId:'+classesId);
    18         $('#studentListTable').datagrid('load',param);
    19     }
    20 });

    ===后台

     1 /**
     2  * 分页查询
     3  * @param page 第几页
     4  * @param size 每页条数
     5  * @param record 查询条件
     6  * @return
     7  */
     8 @RequestMapping(value="list",method = RequestMethod.GET, produces = "application/json; charset=utf-8")
     9 public ResponseEntity<EasyuiGridListPojo<Student>> findPageList(@RequestParam(name = "page", defaultValue = "1") Integer page,
    10         @RequestParam(name = "rows", defaultValue = "10") Integer size,Student record){
    11     try {
    12         PageInfo<Student> pageInfo = studentService.findPageListByWhere(page, size, record);
    13         List<Student> students = pageInfo.getList();
    14         EasyuiGridListPojo<Student> easyuiGridListPojo = new EasyuiGridListPojo<>();
    15         easyuiGridListPojo.setRows(students);
    16         easyuiGridListPojo.setTotal(pageInfo.getTotal());
    17         return ResponseEntity.ok(easyuiGridListPojo);
    18     }catch(Exception e) {
    19         
    20     }
    21     
    22     return ResponseEntity.status(HttpStatus.SC_INTERNAL_SERVER_ERROR).body(null);
    23 }   

    其实后台代码根本没有修改,还是之前的代码

    datagrid复杂查询的实现流程

    实现复杂查询的输入面板

    获取复杂查询的条件输入

    条件的过滤【如空值或缺省值】

    执行datagrid的load方法

    khl
  • 相关阅读:
    栈和队列
    数组的遍历查找
    字符串的子串
    两个字符串
    字符串的遍历
    字符串的替换
    数组和矩阵
    Django 自带的ORM增删改查
    what's the CRSF ??
    Rabbitmq -Publish_Subscribe模式- python编码实现
  • 原文地址:https://www.cnblogs.com/khlbat/p/8148978.html
Copyright © 2020-2023  润新知