JS学习 | 【动态下拉框】连接数据库实现联动效果

目的: 基于Mybatis动态获取数据库中的值展现在下拉框,下拉框选中并提交给后台选中内容,由后台进行处理。
在这里插入图片描述

正文

一、前端样式

参考:bootstrap-select举例

二、数据展现

(1)静态下拉框

在这里插入图片描述
方法一:直接定义

			<form>
				<div class="form-group">
					<div id="left">
						<select class="form-control">
							<option value='1'>aaa</option>
							<option value='2'>bbb</option>
							<option value='3'>ccc</option>
						</select>
					</div>
				</div>
			</form>	

方法二:JavaScript注入

			<form>
				<div class="form-group">
					<div id="left">
						<select class="form-control"></select>
					</div>
				</div>
			</form>	
			<script type="text/javascript">
				var result = [ "aaa", "bbbb", "ccc" ];
				for (var i = 0; i < result.length; i++) {
					$("#left select").append(
							"<option value='"+i+"'>" + result[i] + "</option>");
				}
			</script>

(2)动态下拉框

数据库内容:
在这里插入图片描述
动态注入下拉框:
在这里插入图片描述

根据上述方法二扩展,从后端获取json值返回到result,
这里主要涉及:如何从后端获取json,
参考之前文章:SSM框架(五)jquery三种数据耦合方式【后端->值->前端】

最终效果:
在这里插入图片描述
具体方法:

  • 前端jsp:
    在这里插入图片描述
    注意:get获取的json返回值为一个集合
			<form>
				<div class="form-group">
					<div id="left2">
						<select class="form-control"></select>
					</div>
				</div>
			</form>	
			<script type="text/javascript">
				$(document).ready(function(){
						$.get(
							"${basePath}teacher/getall.d",
							function(arr){
								for(var i = 0 ; i < arr.length;i++){
									/*创建新的一行*/
									var newRow = "<option value="+arr[i].teacherId+">"+arr[i].teacherName+"</option>";								
									/*插入新的一行*/
									$("#left2 select").append(newRow);
								}
							}
						);	
				});
			</script>
  • controller:(注意:这里返回的是list集合)
    在这里插入图片描述
	@RequestMapping("/getall")
	public @ResponseBody List<TeacherInfo> getTeachers(){
		try {
			return teacherInfoService.findTeachers();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
  • service:
    在这里插入图片描述
List<TeacherInfo> findTeachers() throws SQLException;
  • serviceImpl:
    在这里插入图片描述
    这里用的Util配置,直连数据库查询,这里也可以配置到Mybatis中:
	@Override
	public List<TeacherInfo> findTeachers() throws SQLException {
		String sql = "select * from teacher_info";
		Connection con = DBManager.getConnection();
		PreparedStatement pstm = con.prepareStatement(sql);
		ResultSet rs = pstm.executeQuery();
		List<TeacherInfo> teachers = new ArrayList<>();//定义一个列表,存储数据
		while(rs.next()){
			Integer teacherId = rs.getInt(1);
			String teacherName = rs.getString(2);
			String teacherNumber = rs.getString(3);
			//列表中每个元素封装为TeacherInfo实体型
			TeacherInfo t = new TeacherInfo();
			t.setTeacherId(teacherId);
			t.setTeacherName(teacherName);
			//添加到techaers返回列表中
			teachers.add(t);
		}
		pstm.close();
		con.close();
		return teachers;
	}
  • Util配置:
    在这里插入图片描述
package com.chinasofti.ssm01.util;

import java.sql.*;


public class DBManager {
	private static final String URL = "jdbc:mysql://localhost:3306/file_server?useUnicode=true&characterEncoding=UTF-8";
	private static final String USERNAME = "root";
	private static final String PASSWORD = "wy123456";
	private static final String CLASSNAME = "com.mysql.jdbc.Driver";//mysql5.7
	

	static{
		try {
			Class.forName(CLASSNAME);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static Connection getConnection() throws SQLException{
		Connection con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
		return con;
	}
}

动态加载下拉框参考

三、获取下拉框选中传值到后端

这里主要涉及内容:获取下拉框选中值,并传值到后端
参考前面文章:SSM框架(二)四种控制器请求【前端->值->后端】


具体demo在:教师管理系统demo,这里就不重复了。
快速链接:SSM框架(九)Mybatis【多表查询-前后端】交互(教师管理系统demo)

  • 8
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
下拉框二级联动数据库实现需要前端和后端的配合,前端需要通过JavaScript监听第一个下拉框的变化事件,然后向后端发送Ajax请求获取第二个下拉框的数据。后端需要提供两个接口,一个用于获取第一个下拉框的数据,另一个用于根据第一个下拉框的选择获取第二个下拉框的数据。 以下是一个简单的实现思路: 1.前端代码: ```html <!-- 第一个下拉框 --> <select id="building"> <option value="">请选择公寓</option> <!-- 动态添加选项 --> </select> <!-- 第二个下拉框 --> <select id="dormitory"> <option value="">请选择宿舍</option> <!-- 动态添加选项 --> </select> <script> // 监听第一个下拉框的变化事件 document.getElementById('building').addEventListener('change', function() { // 获取选择的 var buildingId = this.value; // 发送Ajax请求获取第二个下拉框的数据 var xhr = new XMLHttpRequest(); xhr.open('GET', '/findAllDormitory?buildingId=' + buildingId); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { // 解析返回的数据 var dormitories = JSON.parse(xhr.responseText); // 清空第二个下拉框的选项 var dormitorySelect = document.getElementById('dormitory'); dormitorySelect.innerHTML = '<option value="">请选择宿舍</option>'; // 动态添加选项 dormitories.forEach(function(dormitory) { var option = document.createElement('option'); option.value = dormitory.dormitoryId; option.textContent = dormitory.dormitoryName; dormitorySelect.appendChild(option); }); } }; xhr.send(); }); </script> ``` 2.后端代码: ```python # 定义两个接口 @app.route('/findAllBuilding') def find_all_building(): # 查询公寓表获取数据 buildings = Building.query.all() # 将数据转换为字典列表 building_list = [{'buildingId': building.buildingId, 'buildingName': building.buildingName} for building in buildings] # 返回数据 return jsonify(building_list) @app.route('/findAllDormitory') def find_all_dormitory(): # 获取一级下拉框的选择 building_id = request.args.get('buildingId') # 根据选择查询宿舍表获取数据 dormitories = Dormitory.query.filter_by(buildingId=building_id).all() # 将数据转换为字典列表 dormitory_list = [{'dormitoryId': dormitory.dormitoryId, 'dormitoryName': dormitory.dormitoryName} for dormitory in dormitories] # 返回数据 return jsonify(dormitory_list) ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值