layui多级联动下拉框的实现_简单三级联动的实现

2bb0453aa4df6349d7e17a14078aa962.png

当我们做一些例如注册页面的时候,可能会遇到要选择地址的操作,这时会出现三个选择框,当你选择省级单位的时候会自动在选择筐中,弹出她所属的市级单位的列表,当选择市级单位时又会弹出县级单位,我们要实现的就是这样的三级联动,当然也会有更简单的插件方法,但学习,我们可以通过这来看它运行的过程。我么要实现的需求是这样的:

  • 页面中有三个下拉框选项,分别为省下拉框,市下拉框,区/县下拉框
  • 选择省,则市下拉框中出现对应的该省下的市信息,选择市,则区/县下拉框中
  • 出现对应的该市下面的区/县信息

分析这个实现过程大致可以这样:

  • 1、创建页面:页面中有三个下拉框,分别为省、市、区/县
  • 2、页面加载成功发起ajax请求,请求省的信息,并将响应结果 填充到省下拉框中
  • 3、选择省触发一个新的js函数 的执行,该函数中发起新的ajax请求 请求该省下的市信息,并将响应数据填充到市下拉框
  • 4、选择市信息触发一个新的js函数的执行,该函数中发起新的ajax请求 请求该市下的区/县信息,并将数据填充到区/县下拉框中

数据库呢我们可以这样去构建:

创建表(area):存储了省、市、区/县信息

  • 设计表实现一:只存储了数据,但是数据之间的层级关系没有存储。
  • 地区id:areaid
  • 地区名:areaname
  • 设计表实现二:
  • 地区id:areaid
  • 地区名:areaname
  • 地区上级id:parentid

建表语句:

Create table area (areaid int auto_increment primary key,areaname varchar(10) not null,
parenteid int(20) not null,arealevlel int(2) not null,status int(3) not null)

创建好表之后就可以进行项目的构建了,在mvc思想下进行项目分层:

首先在pojo层新建实体类Area,他的属性为:要添加共有取值赋值方法等,带参无参构造等;

package com.bjsxt.pojo;public class Area {private int areaid;private String areaname;private int parentid;private int arealevel;private int status;

之后便是业务服务层,要有AreaServive接口与其实现方法

package com.bjsxt.service;import java.util.List;import com.bjsxt.pojo.Area;public interface AreaService {List<Area> selByPid(int parentid);}
package com.bjsxt.service.impl;import java.util.List;import com.bjsxt.dao.AreaDao;
import com.bjsxt.dao.impl.AreaDaoImpl;
import com.bjsxt.pojo.Area;
import com.bjsxt.service.AreaService;public class AreaServiceImpl implements AreaService {AreaDao ad= new AreaDaoImpl();@Overridepublic List<Area> selByPid(int parentid) {return ad.selByPid(parentid);}}

数据处理层

package com.bjsxt.dao;import java.util.List;import com.bjsxt.pojo.Area;public interface AreaDao {List<Area> selByPid(int parentid);}

数据层实现类

ackage com.bjsxt.dao.impl;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;import com.bjsxt.dao.AreaDao;
import com.bjsxt.pojo.Area;
import com.bjsxt.util.DBUtil;public class AreaDaoImpl implements AreaDao {@Overridepublic List<Area> selByPid(int parentid) {//声明Connection conn=null;PreparedStatement ps=null;ResultSet rs=null;List<Area> list=new ArrayList<>();try {conn=DBUtil.getConnection();String sql="select * from area where parentid=?";ps = conn.prepareStatement(sql);ps.setInt(1, parentid);rs=ps.executeQuery();while(rs.next()){Area ar=new Area();ar.setAreaid(rs.getInt("areaid"));ar.setAreaname(rs.getString("areaname"));ar.setParentid(rs.getInt("parentid"));ar.setArealevel(rs.getInt("arealevel"));ar.setStatus(rs.getInt("status"));list.add(ar);}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{DBUtil.closeAll(rs, ps, conn);}return list;}}

还有DBUtil工具类,就是连接数据库操作的一个工具类,很多种,就不列出来了。

接下来就servlet的构建

package com.bjsxt.servlet;import java.io.IOException;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.bjsxt.pojo.Area;
import com.bjsxt.service.AreaService;
import com.bjsxt.service.impl.AreaServiceImpl;
import com.google.gson.Gson;public class AreaServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//设置编码格式req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");//获取请求数据int parentid = Integer.parseInt(req.getParameter("parentid"));//处理请求数据AreaService ar= new AreaServiceImpl();List<Area> list= ar.selByPid(parentid);//处理响应//直接相应resp.getWriter().write(new Gson().toJson(list));}
}

项目展示jsp页面构建

%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>My JSP 'select.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--><script type="text/javascript" src="js/jquery-1.9.1(1).js"></script><script type="text/javascript">$(function() {//默认省的信息getData(0,"pre");//选择市$("#pre").change(function(){var areaid=$("#pre").val();getData(areaid,"shi");})//县的信息$("#shi").change(function(){var areaid=$("#shi").val();getData(areaid,"xian");})function getData(areaid,sid) {$.get("area",{parentid:areaid},function(data){//将省数据放入到下拉框//使用eval将数据转化为json格式对象eval("var areas="+data);var sel=$("#"+sid);sel.empty();//遍历:for(var i=0;i<areas.length;i++){sel.append("<option value="+areas[i].areaid+">"+areas[i].areaname+"</option>");}$("#"+sid).trigger("change");		})}
})</script></head><body style="background-color: activecaption;text-align:center" ><div style="margin: auto;width=800px;margin-top: 200px">省:<select name="" id="pre" style="width:200px;height:30px;"></select>市:<select name="" id="shi" style="width:200px;height:30px;"></select>县:<select name="" id="xian" style="width:200px;height:30px;"></select></div></body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412285.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

django初探

首先在确保python已经安装之后(3.7), 安装django. 刚开始学习 只做了简单的测试 就是控制器与视图,路由的链接 首先 python manage.py startapp demo 使用此命令创建项目中的各个模块目录在各个目录中创建对应的子路由文件 然后将子路由文件引入到主路由文件中 也就是根目录的…

加载文件流_未关闭的文件流会引起内存泄露么?

专注于Java领域优质技术&#xff0c;欢迎关注来自&#xff1a;技术小黑屋最近接触了一些面试者&#xff0c;在面试过程中有涉及到内存泄露的问题&#xff0c;其中有不少人回答说&#xff0c;如果文件打开后&#xff0c;没有关闭会导致内存泄露。当被继续追问&#xff0c;为什么…

10截图时屏幕变大_手机上网课、开视频会议,如何让屏幕变大一点?

点击图片进入商城▲车载闪充49.9秒杀&#xff01;Reno2 Z直降200元&#xff01;真无线耳机团购可省130元&#xff01;这个特殊时期很多伙伴和小O一样在家远程云办公、线上会议学生朋友们也是在家参加网上课程虽然现在的手机屏幕越来越大但总盯着手机还是难免眼酸但是掌握这个手…

分层和分段用什么符号_小编带你学直播——后牙树脂分层堆塑

后牙龋损过大&#xff0c;患者又不想做冠修复&#xff0c;树脂修补真的能挽救被龋坏侵蚀的牙体吗&#xff1f;补牙看起来简单&#xff0c;但是补好却难&#xff0c;同事用分层堆塑补的后牙窝沟分明&#xff0c;有点想学...本周小编为你推荐吕春阳老师——《后牙树脂分层堆塑》专…

CSAPP:第十一章 网络编程

CSAPP&#xff1a;第十一章 网络编程 11.1 客户端服务器模型11.2 全球IP因特网11.3 套接字接口 11.1 客户端服务器模型 每个网络应用都是基于客户端-服务器模型。采用这个模型&#xff0c;一个应用是由一个服务器进程和一个或者多个客户端进程组成。  客户端-服务器模型的基本…

动态表格数据序号从1开始_EXCEL对面的表姐看过来,你真的会给表格添加序号吗?...

原创作者&#xff1a; EH看见星光 转自&#xff1a;Excel星球哈罗&#xff0c;大家好&#xff0c;我是星光&#xff0c;今天给大家总结分享的表格技巧是……序号。什么是序号&#xff1f;序号就是一二三四五上山打老虎……一二三四一二三四像首歌……一二三四二二三四脖子扭扭屁…

设置公共请求参数_基于分布式锁的防止重复请求解决方案(值得收藏)

关于重复请求&#xff0c;指的是我们服务端接收到很短的时间内的多个相同内容的重复请求。而这样的重复请求如果是幂等的(每次请求的结果都相同&#xff0c;如查询请求)&#xff0c;那其实对于我们没有什么影响&#xff0c;但如果是非幂等的(每次请求都会对关键数据造成影响&am…

【niop2016】

D1T1 玩具谜题 my总结&#xff1a; 【luogu1563】【niop2016】玩具谜题 题面 模拟&#xff01;&#xff01;&#xff01; D1T2 天天爱跑步 my总结&#xff1a; 暂无 题面 我太弱了还搞不出来 暴力也不想写 D1T3 换教室 my总结&#xff1a;【niop2016】【luogu1600】…

Linux 随机数

一、rand函数 rand函数的简单使用&#xff0c;rand()返回一个[0, RAND_MAX]中的随机数  #include <stdlib.h> #include <stdio.h> #include <time.h>int main() {printf("%d\n", RAND_MAX);//srand(time(NULL));for(int i 0; i < 5; i){print…

linux 2行数据为一条记录 该如何操作这一条记录_Linux 日志文件系统原来是这样工作的...

文件系统要解决的一个关键问题是怎样防止掉电或系统崩溃造成数据损坏&#xff0c;在此类意外事件中&#xff0c;导致文件系统损坏的根本原因在于写文件不是原子操作&#xff0c;因为写文件涉及的不仅仅是用户数据&#xff0c;还涉及元数据(metadata)包括 Superblock、inode bit…

JMeter - 如何创建可重用和模块化测试脚本

概述&#xff1a; 我的应用程序几乎没有业务关键流程&#xff0c;我们可以从中提出不同的业务工作流程。当我试图在JMeter中提出性能测试脚本时&#xff0c;我需要找到一些方法来创建可重用/模块化的测试脚本。这样我就可以创建不同的工作流程。 对于Ex&#xff1a; 让我们考虑…

请求支付宝渠道报错:40006,Insufficient Permissions,ISV权限不足

错误描述&#xff1a; 申请的是支付宝2.0产品&#xff08;如何区分支付宝产品是1.0还是2.0&#xff09;&#xff0c;请求支付宝渠道时&#xff0c;报错&#xff1a; {"code":"40006","msg":"Insufficient Permissions","sub_code…

idea中lombok的使用

1.安装插件 在File-Setting-Plugins-Browse Repostitories中搜索Lombok Plugin插件安装 安装完成先别急着重启&#xff0c;继续设置&#xff0c;在File-Setting-Build, Execution, Deployment-Compiler-Annotation Processors中点击Enable annotation processors 确定后重启ide…

是隐极电机_资料 | 发电机定子绕组端部动态特性试验详解

一、试验目的大型汽轮发电机运行过程中&#xff0c;定子端部受二倍工频(100Hz)的电磁激振力。如果定子端部的模态接近100Hz&#xff0c;将发生谐振&#xff0c;从而可能因振幅过大而发生结构松动、磨损、绝缘损坏等现象&#xff0c;甚至断裂等故障&#xff0c;严重威胁机组的安…

[导入]在C++ Builder3下实现程序自动运行的方法

文章来源:http://blog.csdn.net/nm/archive/2000/08/10/4403.aspx 转载于:https://www.cnblogs.com/zhaoxiaoyang2/archive/2000/08/10/816562.html

中动态路径加载_GOT段在linux系统中实现代码动态加载的作用和其他段的说明

上一节我们看到&#xff0c;当程序想调用系统函数时&#xff0c;在编译阶段无法确认被调用函数所在的虚拟地址。因此必须有机制让程序在运行过程中&#xff0c;在调用系统API的时候有办法去确定所调用的系统函数对应的入口地址&#xff0c;这就是代码运行时对应动态加载的过程。…

GitLab结合Eclipse的简单使用 - 20190211

需求&#xff1a; 移动端的值班经理视图调用了三个接口&#xff0c;需要在移动段的应用下加上三个接口的路由&#xff0c;分别是&#xff1a; /xxx-mvc/dutyView/getProviderSysDeal /xxx-mvc/dutyView/getSysAlarmData /xxx-mvc/dutyView/getSysStaffInfo package com.xxx.xxx…

中文整合包_MIMOSA2: 基于微生物组和代谢组数据的整合分析

MIMOSA2&#xff1a;基于微生物组和代谢组数据的整合分析MIMOSA2 升级自MIMOSA1。是 Borenstein 实验室(http://borensteinlab.com/ , 专注宏基因组系统 生物学)最新开发的工具。用于微生物群落和代谢组的整合分析&#xff0c;寻找微生物和代谢产物之间的关系。先前Borenstein …

python二级简书_12月4日,总结发现杯,备战python二级

上午看二级第一二章下午查询成绩夜晚看第三章做笔记&#xff0c;回看笔记总结&#xff1a;整体不是很理想&#xff0c;但感觉都比我高&#xff0c;呜呜呜他们的成绩一个个的都出来了&#xff0c;我的呢……为什么&#xff0c;还查不到&#xff0c;我知道我考的差&#xff0c;但…