select2中,获取数据库中的数据作为select2的option,或者说是:加载远程数据(Loading remote data)
下面是详细的步骤,select2官网:http://select2.github.io/examples.html
加载远程参数或者数据库中的数据,2者性质类似;除此之外,本文还涉及select2中搜索查询的功能
我们知道,select2单选时,是存在查询功能的,但是这样的查询是要查出所有的数据,并在select2中显示;而本例是只有用户输入的查询字段超过了指定字符数,才会将查询的结果显示在下拉框中。
相关示例与显示效果可见select2官网:Loading remote data,相关内容。
(一)准备工作,建立bean类
public class Select2 { private String id; private String text; //省略set与get的方法public String getHtmlOption() { return "<option value='" + this.id + "'>" + this.text + "</option>"; } }
(二)准备工作,建立controller
@ResponseBody @RequestMapping(value = "/loadSelect2", method = RequestMethod.POST) public JSONObject subjectType(@RequestParam("data") String data) { JSONObject ret = new JSONObject(); try { List<Select2> list = new ArrayList<Select2>(); JSONObject param = JSON.parseObject(data);
//这里使用封装方法获取BusinessService的class,自己想办法;querySelect2查询数据库内容 list = SpringUtils.getBean(BusinessService.class).querySelect2(param); Gson gson = new Gson(); ret.put("data", JSON.parseArray(gson.toJson(list))); } catch (Exception e) { e.printStackTrace(); } return ret; }
sevice方法:
public List<Select2> getSelect2(JSONObject json){ String sql = this.getSQL("Select2/" + json.getString("key")); Object[] param = json.getString("param").split(","); //解析前台插入的参数 return jdbc.queryList(Select2.class, sql, param); //查询数据库,jdbc封装了方法,这里省略 }
sql方法:SELECT code id, name text from company where code = ? and instr(name,?) > 0 //instr(factorName,?)获取select2查询输入的内容
(三)js中,实现方法
其中,jsp(html)中,如下:
<select class="mater" id="mate" style="width: 100%;">
</select>
function loadmaterialDealerOption(){
//为select2赋初始值,其中mate与name是前台传入的内容 $('#mate').html('<option value="' + mate + '">' +name+ '</option>').trigger("change");
$("#mate").select2({ placeholder :"请输入...", allowClear : true, ajax : { url : "/select2", dataType : 'json', delay : 250, method:"post", data : function(params) { //这里可以将sql的定位标签与查询输入内容、其它参数,以json形式传入后台
var pjson = { key : "dog", param : params.term+“,”+加入其它参数 //获取select2查询输入信息 }; return { data : JSON.stringify(pjson) // search term }; }, processResults : function(data, params) { var options = new Array(); $(data.data).each(function(i, o) { options.push({ //获取select2个必要的字段,id与text id : o.id, text : o.text }); }); return { results : options //获取查询后的结果 }; }, cache : true //开启缓存 }, language : "zh-CN", minimumInputLength : 2 //最少2个字符,select2才显示查询的内容 } }); }