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才显示查询的内容 } }); }

 

posted @ 2017-06-10 10:25  小码农成长记  阅读(8802)  评论(0编辑  收藏  举报