Layui hint: Table modules: Did not match to field!! 实现监听排序

需求:

要实现的效果是输入一个整数数字,实现排序;排序是监听排序事件,并不是简单的前端排序,后端数据排序;

 1、前端增加按钮和下拉框:

<div class="layui-input-inline layui-input-sm m-r-5">
<input type="text"  class="layui-input" id="totalCheck" placeholder="请输入检测次数"οnkeyup="this.value=this.value.replace(/\D/g,'')"/>
</div>
<div class="layui-input-inline layui-input-sm " style="width:80px;" id="totalCheckStatus">
    <select>
         <option value="0">等于</option>
         <option value="1">大于</option>
         <option value="2">小于</option>
   </select>
 </div>
注意事项:里面多了一个onkeyup事件,用来限定输入的值只能是数字。如果是非数字字符,会强制性的清空内容;

2、监听排序事件:

在表格渲染的时候设置autoSort属性为false,另外在要进行排序的字段中,设置 sort:true;

table.on('sort(dataTable)', obj => {
    table.reload('dataTable', {
        initSort: obj
        , where: {
            orderField: obj.field
            , orderType: obj.type
        }
    });
});

问题1:field字段列没有填数据的后果,不管你用了模板,最好还是把字段加上,不然连监听排序事件都不会进去;

会报错:Layui hint: Table modules: Did not match to field

问题2:点击之后,不是按条件查到的数据排序,又变成了新的没有经过筛选的数据;也就是说没有将之前按条件拿数据
的时候的条件进行保存;认真参考官方文档数据表格部分的排序切换,搞懂传的字段意思和进行服务端排序的要点。

3、后端服务层具体实现

关键步骤:我前端传的是两个数字,一个是次数,一个是下拉选择框的值;

点击搜索的时候将这两个值一起塞到DATA数组里面,并在后台接收,另外第一次进去的时候记得带上一个默认值;

不然会报错进不去serviceimpl实现类,会报空指针;

where: {loginKey: APP.getHeaders()['loginKey'], 'totalCheckStatus': 0, 'totalCheck': -1}

let totalCheckStatus = $("#totalCheckStatus").find('.layui-this').attr('lay-value');
let totalCheck = $("#totalCheck").val() || -1;
$DATA['totalCheckStatus'] = totalCheckStatus;
$DATA['totalCheck'] = totalCheck;

 

if (check != -1) {
    WHERE_SQL += " AND UC.total_check ";
    switch (checkStatus) {
        case 0:
            WHERE_SQL += " =  :totalCheck ";
            break;
        case 1:
            WHERE_SQL += " >  :totalCheck ";
            break;
        case 2:
            WHERE_SQL += " <  :totalCheck ";
            break;
    }
    paramValueMap.put("totalCheck", check);
}
COUNT_SQL += WHERE_SQL;
if (!Lun51Utils.isEmpty(orderField) && !Lun51Utils.isEmpty(orderType)) {
    if ("totalCheck".equals(orderField)) {
        if ("desc".equals(orderType)) {
            WHERE_SQL += " ORDER BY UC.total_check DESC ";
        } else if ("asc".equals(orderType)) {
            WHERE_SQL += " ORDER BY UC.total_check ASC ";
        }
    }
}
拿数据最后走的是namedParameterJdbcTemplate.queryForList(QUERY_SQL, paramValueMap)这种方式,map里面塞的是所有查询条件,查询语句用到的具名参数的地方都是从这个map里面拿;

问题3:拿到的数据明明是对的,值和顺序都是对的,可是放到HashMap中还是没按降序或者自己想要的顺序,是真的坑,后来打断点,调试,就是那一个塞的动作就把顺序打乱了;后来想到一个办法,用LinkedHashMap装,这种容器你存的时候是什么顺序,往外取的时候就是什么顺序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章