select下拉框二级联动

1 篇文章 0 订阅

两种方法实现,差别不大

一、编写jsp代码

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <!-- 引入 Bootstrap -->
 <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
<link href="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.bootcdn.net/ajax/libs/bootstrap-validator/0.5.3/js/bootstrapValidator.min.js"></script>
<link rel="stylesheet" type="text/css"
	href="https://www.layuicdn.com/layui-v2.6.8/css/layui.css" />
<script src="https://www.layuicdn.com/layui-v2.6.8/layui.js"></script>
<title>下拉框二级联动</title>
</head>
<body>

	<div class="container">

		<div class="row clearfix">
			<div class="col-md-12 column">
				<div class="page-header">
					<h1>
						<small>下拉框二级联动</small>
					</h1>
				</div>
			</div>
		</div>

		<form class="layui-form" action="${pageContext.request.contextPath }/reserve/reserveVaccine" method="post">
			<div class="layui-form-item">
		        <label class="layui-form-label">预约日期</label>
		        <div class="layui-input-inline">
		            <select name="timeDateReserve" id="timeDateReserve" lay-filter="timeDateReserve">
		                <option value="">请选择预约日期</option>
		            </select>
		        </div>
		    </div>
		
		    <div class="layui-form-item">
		        <label class="layui-form-label">具体时间</label>
		        <div class="layui-input-inline">
		            <select name="timePeriodReserve" id="timePeriodReserve">
		                <option value="">请选择具体时间</option>
		            </select>
		        </div>
		    </div>
		</form>	
	</div>
	
	
	
	
	<script type="text/javascript">
		layui.use(['layer', 'form', 'table', 'layedit', 'laydate', 'jquery'], function () {
			// layui引入需要的组件
	        var form = layui.form;
	        var laydate = layui.laydate;
	        var layer = layui.layer;
	        var $ = layui.jquery;
	        
	     	// 二级联动,先渲染父级
	        $(function () {
			    //加载机构类型
				$.ajax({
					url: '${pageContext.request.contextPath }/timePeriod/allDate',// 后台获取日期
					dataType: 'json',
					async: false,
	                cache: false,
					data:{
						'state': 0	//查询状态为正常的所有机构类型
					},
					type: 'post',
					success: function (res) {
						$.each(res.data, function (index, item) {
							$('#timeDateReserve').append(new Option(item));// 下拉菜单里添加元素
						});
						//渲染select
						layui.form.render("select");
					},error: function () {
		                   alert("查询失败");
		               }
				});
	        }); 

	  	// 然后监听父级,每当父级发生变化时,渲染子级
	     form.on('select(timeDateReserve)', function(data){
	
	         var timeDateReserve = data.value; // timeDateReserve 选中的预约日期
	         
	         $.ajax({
	             url: '${pageContext.request.contextPath }/timePeriod/timePeriodByDate',
	             dataType: 'json',
	             type: 'post',
	             data: {timeDateReserve:timeDateReserve},		// 传入预约日期,查找该日期的所有时间段
	             success: function (resData) {
	            	 
	                 // 清空时间段
	                 $('#timePeriodReserve').empty();
	
	                 $.each(resData.data, function (index, value) {
	                     $('#timePeriodReserve').append(new Option(value));// 下拉菜单里添加元素
	                 });
	
	                 //渲染select
	                 form.render('select');
	             }
	         });
	     });
 
	   });
		
		
	</script>
</body>
</html>

二、编写后台代码(方法一)

2.1 工具类

package per.Kidd.utils;

import java.util.ArrayList;
import java.util.List;

import io.swagger.annotations.Api;
import lombok.*;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder(toBuilder = true)
@Api("从数据库获取的值放在ResponseResult的data中")
public class ResponseResult<T> {

    private int code;   // 0:success 1:failure
    private String msg; // 返回信息
    //private int count;  // 总记录数
    private List<String> data;
    
	public ResponseResult(List<String> list) {
		
		if(list != null) {
			//this.count = list.size();
			this.code = 0;
			this.msg = "success";
			this.data = list;
		}
		
		else {
			//this.count = 0;
			this.code = 1;
			this.msg = "error";
			this.data = new ArrayList<>();
		}
	}
}

2.2 dao层

package per.Kidd.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import per.Kidd.utils.ResponseResult;

@Repository
public interface TimePeriodMapper {
	// 查询时间段
	ResponseResult<String> queryByDate(String date);
}

2.3 编写对应xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
       PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
       "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
       
<mapper namespace="per.Kidd.dao.TimePeriodMapper">

	<select id="queryAllTimeByDate" resultType="String">
		select distinct timePeriod from tb_time_period
		<where>
			<if test="date != null and date != ''">
				date like concat('%',#{date},'%')
			</if>
		</where>
	</select>
	
</mapper>

2.4 service层

package per.Kidd.service;

import org.apache.ibatis.annotations.Param;

import per.Kidd.utils.ResponseResult;

public interface TimePeriodService {
	ResponseResult<String> queryByDate(String date);
}

2.5 serviceImp层

package per.Kidd.service.Impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import per.Kidd.bean.TimePeriod;
import per.Kidd.bean.VaccineType;
import per.Kidd.dao.TimePeriodMapper;
import per.Kidd.service.TimePeriodService;
import per.Kidd.utils.ResponseResult;

public class TimePeriodServiceImpl implements TimePeriodService {
	
	//service调用dao层的操作,设置一个set接口,方便Spring管理
	private TimePeriodMapper timePeriodMapper;
	
	public void setTimePeriodMapper(TimePeriodMapper timePeriodMapper) {
		this.timePeriodMapper = timePeriodMapper;
	}

	@Override
	public ResponseResult<String> queryByDate(String date) {
		List<String> list = timePeriodMapper.queryAllTimeByDate(date);
		ResponseResult<String> result = new ResponseResult<>(list);
		return result;
	}
}

2.6 Controller层

@Controller
@RequestMapping("/timePeriod")
public class TimePeriodController {
	@RequestMapping(value = "/timePeriodByDate", method = RequestMethod.POST , produces = "application/json; charset=utf-8")
	@ResponseBody
	public ResponseResult<String> queryTimePeriodByDate(String timeDateReserve) {
		return timePeriodService.queryByDate(timeDateReserve);
	}
}

三、编写后台代码(方法二)

3.1 工具类

package per.Kidd.utils;

import java.util.ArrayList;
import java.util.List;

import io.swagger.annotations.Api;
import lombok.*;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder(toBuilder = true)
@Api("从数据库获取的值放在ResponseResult的data中")
public class ResponseResult<T> {

    private int code;   // 0:success 1:failure
    private String msg; // 返回信息
    //private int count;  // 总记录数
    private List<String> data;
    
	public ResponseResult(List<String> list) {
		
		if(list != null) {
			//this.count = list.size();
			this.code = 0;
			this.msg = "success";
			this.data = list;
		}
		
		else {
			//this.count = 0;
			this.code = 1;
			this.msg = "error";
			this.data = new ArrayList<>();
		}
	}
}

3.2 dao层,这里返回Map

package per.Kidd.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

@Repository
public interface TimePeriodMapper {
	// 查询时间段
	Map<String,Object> queryAllByDate(String date);
}

3.3 编写对应xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
       PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
       "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
       
<mapper namespace="per.Kidd.dao.TimePeriodMapper">

	<select id="queryAllTimeByDate" resultType="String">
		select distinct timePeriod from tb_time_period
		<where>
			<if test="date != null and date != ''">
				date like concat('%',#{date},'%')
			</if>
		</where>
	</select>
	
</mapper>

3.4 service层

package per.Kidd.service;

import org.apache.ibatis.annotations.Param;

import java.util.Map;

public interface TimePeriodService {
	Map<String,Object> queryAllByDate(String date);
}

3.5 serviceImp层

package per.Kidd.service.Impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import per.Kidd.bean.TimePeriod;
import per.Kidd.bean.VaccineType;
import per.Kidd.dao.TimePeriodMapper;
import per.Kidd.service.TimePeriodService;
import per.Kidd.utils.ResponseResult;

public class TimePeriodServiceImpl implements TimePeriodService {
	
	//service调用dao层的操作,设置一个set接口,方便Spring管理
	private TimePeriodMapper timePeriodMapper;
	
	public void setTimePeriodMapper(TimePeriodMapper timePeriodMapper) {
		this.timePeriodMapper = timePeriodMapper;
	}

	@Override
	public Map<String, Object> queryAllByDate(String date) {
		Map map = new HashMap();
		List<String> list = timePeriodMapper.queryAllTimeByDate(date);
		try {
			map.put("msg", "success");
			map.put("code", 0);
			
			map.put("data", list);
		} catch (Exception e) {
			
			e.printStackTrace();
			map.put("msg", "error");
			map.put("code", 1);
		}
		
		return map;
	}
}

3.6 Controller层

@Controller
@RequestMapping("/timePeriod")
public class TimePeriodController {
	@RequestMapping(value = "/timePeriodByDate", method = RequestMethod.POST , produces = "application/json; charset=utf-8")
	@ResponseBody
	public String queryTimePeriodByDate(String timeDateReserve) {
		Map<String, Object> map = timePeriodService.queryAllByDate(timeDateReserve);

		String json = JSON.toJSONString(map);
		return json;
	}
}

四、效果图

4.1 示例一

在这里插入图片描述
在这里插入图片描述

4.2 示例二

在这里插入图片描述

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值