Springboot+layui 回填(回显)下拉(select)选择框

在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虽然提供了官方文档,但是有很多地方,去翻文档还是很难去翻到的,有时候还需要借助博客。

以上如有错误,欢迎指出!!!

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个问题比较复杂,需要根据你具体的需求和实现方式来编写代码。这里提供一个基本的思路和代码架,你可以根据自己的情况进行修改和完善。 1. 在前端页面中添加一个表单和一个文件上传组件,用户可以填写表单信息和上传文件。 2. 在后端Spring Boot应用中添加一个API接口,接收前端发送的表单数据和文件,并将其保存到MySQL数据库中。可以使用Spring Boot提供的JPA或MyBatis等持久化架来实现数据存储。 3. 当用户需要查看已上传的文件和表单数据时,在前端页面中发送一个请求到后端API接口,获取MySQL中的数据。 4. 后端API接口可以使用Spring Boot提供的RestController注解来定义,具体代码如下: ```java @RestController @RequestMapping("/api") public class MyController { @Autowired private MyService myService; // 上传文件和表单数据 @PostMapping("/upload") public ResponseEntity<?> uploadFile(@RequestParam("file") MultipartFile file, @RequestParam("data") String data) { // TODO: 将文件和数据保存到MySQL中 return ResponseEntity.ok().build(); } // 获取所有已上传的文件和表单数据 @GetMapping("/data") public ResponseEntity<List<MyData>> getAllData() { List<MyData> dataList = myService.getAllData(); return ResponseEntity.ok(dataList); } } ``` 5. 前端页面可以使用Vue.js和Element UI等架来实现,具体代码如下: ```html <template> <div> <!-- 表单 --> <el-form> <el-form-item label="姓名"> <el-input v-model="name"></el-input> </el-form-item> <el-form-item label="年龄"> <el-input v-model="age"></el-input> </el-form-item> <el-form-item label="文件"> <el-upload :action="uploadUrl" name="file" :headers="headers" :on-success="handleFileUploadSuccess"> <el-button slot="trigger" size="small" type="primary">上传文件</el-button> </el-upload> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm">提交</el-button> </el-form-item> </el-form> <!-- 数据列表 --> <el-table :data="dataList"> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <el-table-column label="文件"> <template slot-scope="scope"> <a :href="getFileUrl(scope.row.id)">{{ scope.row.fileName }}</a> </template> </el-table-column> </el-table> </div> </template> <script> import axios from 'axios'; export default { data() { return { name: '', age: '', uploadUrl: '/api/upload', headers: { 'Content-Type': 'multipart/form-data' }, dataList: [] } }, methods: { handleFileUploadSuccess(response) { // TODO: 处理文件上传成功后的逻辑 }, submitForm() { // TODO: 发送表单数据和文件到后端API接口 }, getAllData() { axios.get('/api/data') .then(response => { this.dataList = response.data; }) .catch(error => { console.log(error); }); }, getFileUrl(id) { // TODO: 根据文件ID生成文件下载链接 } }, mounted() { this.getAllData(); } } </script> ``` 这只是一个简单的代码架,具体实现还需要根据实际情况来进行修改和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值