需求:
要實現的效果是輸入一個整數數字,實現排序;排序是監聽排序事件,並不是簡單的前端排序,後端數據排序;
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裝,這種容器你存的時候是什麼順序,往外取的時候就是什麼順序。