生成下拉框的幾種方法總結——數據來源:枚舉
阿新 • • 發佈:2018-11-22
ati state 數據集 equal type() tty each 其中 sele
上節介紹數據來源是數據庫,這節介紹對枚舉進行數據獲取,形成下拉列表。
使用場景:某些狀態值獲取等,一般是數據量小,不需要在數據庫中進行維護的數據集
1、前提要有枚舉數據
package com.test.entity.neworder; import java.util.Objects; /** * 新訂單狀態 * * @author 劉濤 */ public enum NewOrderStateEunm { //已刪除 已刪除(0, "已刪除"), //已創建 已創建(1, "已創建"), //已發布 已發布(2, "已發布"), Integer index; String state; NewOrderStateEunm(Integer index, String state) { this.index = index; this.state = state; } public Integer getIndex() { return index; } public String getState() { return state; } /** * 通過index獲取value * * @param index 枚舉索引 * @return 枚舉值*/ public static String getValue(Integer index) { for (NewOrderStateEunm c : NewOrderStateEunm.values()) { if (Objects.equals(c.getIndex(), index)) { return c.getState(); } } return null; } /** * 通過value獲取index * * @param state 枚舉值 * @return 枚舉索引*/ public static String getIndex(String state) { for (NewOrderStateEunm c : NewOrderStateEunm.values()) { if (Objects.equals(c.getState(), state)) { return c.index + ""; } } return "error"; } }
2、Controller層
/** * 獲取訂單狀態類型 */ @RequestMapping("/getNewOrderStateForSelect") @ResponseBody public List<Map<String, Object>> getNewOrderStateForSelect() { return EnumUtil.getNewOrderStateEnum(); }
3、EnumUtil工具類文件中
package com.test.util; import com.test.entity.neworder.NewOrderStateEunm; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class EnumUtil { public static List<Map<String, Object>> getNewOrderStateEnum() { List<Map<String, Object>> lm = new ArrayList<>(); Map<String, Object> m; for (int i = 0; i < NewOrderStateEunm.values().length; i++) { m = new HashMap<>(); m.put("id", NewOrderStateEunm.values()[i].getIndex() + ""); m.put("type", NewOrderStateEunm.values()[i].getState()); lm.add(m); } return lm; } }
4、前端頁面
<select type="text" id="stateCode" name="state" lay-filter="state" lay-search autocomplete="off" ></select>
5、由於我使用的是layui,所以js部分
<script type="text/javascript"> var $ = layui.jquery; $(function () { getNewOrderStateForSelect("stateCode"); }); /** * 獲取訂單狀態列表 * @param selectId */ function getNewOrderStateForSelect(selectId) { var $selectId = $("#" + selectId); var url = "commonCtrl/getNewOrderStateForSelect"; $.get(url, function (data) { console.log(data); var info = "<option value=‘‘>請選擇</option>"; for (var i = 0; i < data.length; i++) { info += "<option value=" + data[i].id + ">" + data[i].type + "</option>"; } $selectId.append(info); layui.use(‘form‘, function () { var form = layui.form; form.render(‘select‘); }) }) } </script>
完畢!
昨天還遇到一個比較復雜的獲取方式:後臺將枚舉寫的復雜了。如下:
for(int i=0;i< SettleTypeNewEnum.values().length;i++){ Map code=new HashMap(); code.put(SettleTypeNewEnum.values()[i].getType(),SettleTypeNewEnum.values()[i].getIndex()); payMethodCodeList.add(code); }
所以,前端獲取到的是{[object object],[object object]},用json解析一下就是{[張三:12],[李四:23]}這種格式,
但是我想獲取其中的值,直接調用對象中的屬性,暫未發現有什麽屬性能直接獲取到數據。
so,只能利用以下這種方式解決了:
function getNewPayMethodTypeForSelect(selectId) { var $selectId = $("#" + selectId); var url = "newSettleCtrl/getPayMethodCode"; $.get(url, function (data) { var info = "<option value=‘‘>請選擇</option>"; $.each(data.data,function(i,v){ info += "<option value=" + v[Object.keys(v)[0]] + ">" + Object.keys(v)[0] + "</option>"; }); $selectId.append(info); layui.use(‘form‘, function () { var form = layui.form; form.render(‘select‘); }) }) }
生成下拉框的幾種方法總結——數據來源:枚舉