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裝,這種容器你存的時候是什麼順序,往外取的時候就是什麼順序。

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