生成下拉框的几种方法总结——数据来源:枚举

上节介绍数据来源是数据库,这节介绍对枚举进行数据获取,形成下拉列表。

使用场景:某些状态值获取等,一般是数据量小,不需要在数据库中进行维护的数据集


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

    })
  })
}
原文地址:https://www.cnblogs.com/yangyuke1994/p/9999328.html