在Java学习阶段,相信许多小伙伴用Layui搭建过前端页面,对于后端开发学习,使用一个好用的前端框架尤为重要,记录一下我在开发过程中遇见的问题。
问题描述:
我在使用layui做模态框时,需要查询数据库的单个字段进行数据回填到下拉选择框。直接上图演示一下。
此时的数据为数据库中的数据,当然,这些数据是和要添加的表,不是同一个。此时就需要考虑,怎么查询一张表的一个字段,进行回填了。
解决:
因为一张表如果只用一个字段,要把所有的字段都查出来的话,未免效率有些低,所以就要只查询一个字段,这里我使用的MybatisPlus省略的sql语句,如果你使用的是mybatis,则需要手动编写sql,简单的sql我就不再描述,大家可以自行百度。
省略了实体类,此处只需要把queryWrapper.select("depart_name");换成你自己的数据库字段名即可,也可以拼接。
stream流为jdk1.8的新特性(现在来说,好像也不新了)。没了解过的小伙伴可以去百度了解一下。
// service 层
public Map selectDepartment() {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.select("depart_name");
List<Department> list = departmentDao.selectList(queryWrapper);
List<String> collect = list.stream().map(Department::getDepartName).collect(Collectors.toList());
Map map = new HashMap();
map.put("departs",collect);
return map;
}
此时返回了一个map集合。
在controller层调用一下即可,此时的map集合中存放了要查询的字段的所有数据。并且以JSON格式进行了返回
@ResponseBody
@RequestMapping(value = "/selectAllDepartmentName")
public Map selectAllDepartmentName(){
return departmentService.selectDepartment();
}
前端处理(摘取重要部分)
<div class="layui-form-item">
<label class="layui-form-label">所属部门:</label>
<div class="layui-input-block">
<select id="departName" name="departName" lay-verify="required" lay-filter="department">
</select>
</div>
</div>
ajax回填
$.ajax({
url:"/departmentController/selectAllDepartmentName",
success:function (result) {
// 此处每次打开 做一次清空操作,防止记忆上次的选择
$("#departName").empty();
// 此处添加默认的选择(如果没有这个option,则ios系统可能无法打开下拉框,所以为了(照顾)他们,此处还是有必要的)
$("#departName").append("<option value='' selected disabled>" +"----请选择----"+"</option>")
for (var i = 0; i < result.departs.length; i++) {
$("#departName").append("<option value=" + result.departs[i] + ">" +result.departs[i]+"</option>")
}
// 注意 没有这个渲染,可能会回填失败
layui.form.render('select');
}
})
}
总结:
Layui虽然提供了官方文档,但是有很多地方,去翻文档还是很难去翻到的,有时候还需要借助博客。
以上如有错误,欢迎指出!!!