1. 程式人生 > >生成下拉框的幾種方法總結——數據來源:枚舉

生成下拉框的幾種方法總結——數據來源:枚舉

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);

    })
  })
}

生成下拉框的幾種方法總結——數據來源:枚舉