直接开干就行了;
MVC模式开搞-------》》》
先看一下整体框架结构:
前端发送请求(异步)给servlet,servlet调用service去获取数据库的数据,然后发送到前端
准备各个层的代码------核心代码
servlet代码-----》》》
import cityPojo.Area;
import cityService.CityService;
import cityService.Imp.CityServiceImp;
import com.google.gson.Gson;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@WebServlet("/CityController.do")
public class CityController extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
//给定初始值,以防未传参数时的异常;
Integer parentid=0;
try {//如果转换失败,做一些处理
parentid=Integer.parseInt(req.getParameter("parentid"));
} catch (NumberFormatException e) {
e.printStackTrace();
}
CityService cityService= new CityServiceImp();
// 获得查询到的数据---list集合
List<Area> byParentId = cityService.findByParentId(parentid);
//发送到前端,要用json对象的形式
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
Gson gson= new Gson();//获得gson对象,将获得的list集合转为字符串
String cityInfo = gson.toJson(byParentId);
//发送到前端
resp.getWriter().write(cityInfo);
}
}
前端代码-----》》分解—
需求是页面加载完毕就要实现省份的加载,选择完省份的时候就要加载完城市,
用jquery来实现----》》
<script>
// 页面加载完毕就要加载省份
$(function () {
$.ajax({
type: "GET",//get请求方式
url: "CityController.do?",//请求的servlet
data: "parentid=0",//参数
dataType: "json",//返回的数据类型,这样就可以直接用了,不用转换了
success: function (info) {//后端返回来的信息
$.each(info, function (i, e) {
// 加载完毕省份之后要知道用户选择了那个省,那怎么实现呢?
$("#province").append('<option value="' + e.areaid + '">' + e.areaname + '</option>');
})
}
}
)
})
function showCity(selectId){
$.ajax({
type: "GET",//get请求方式
url: "CityController.do?",//请求的servlet
data: "parentid="+selectId,//参数
dataType: "json",//返回的数据类型,这样就可以直接用了,不用转换了
success: function (info) {//后端返回来的信息
$.each(info, function (i, e) {
// 加载完毕省份之后要知道用户选择了那个省,那怎么实现呢?
$("#city").append('<option value="' + e.areaid + '">' + e.areaname + '</option>');
})
}
}
)
//alert(selectId);
}
</script>
但是写完会有一个问题-----》》
原因是上一次的加载的信息没有清除,清除后就好了“
同样去处理区的信息
写完之后的效果----
但是重复代码太多,可以简化一下-----》》
提取方法 为showArea(selectid,area)
完整的前端代码
<html>
<head>
<title>三级联动</title>
<script src="js/jquery.js"></script>
<script>
// 页面加载完毕就要加载省份
$(function () {
/* $.ajax({
type: "GET",//get请求方式
url: "CityController.do?",//请求的servlet
data: "parentid=0",//参数
dataType: "json",//返回的数据类型,这样就可以直接用了,不用转换了
success: function (info) {//后端返回来的信息
$.each(info, function (i, e) {
// 加载完毕省份之后要知道用户选择了那个省,那怎么实现呢?
$("#province").append('<option value="' + e.areaid + '">' + e.areaname + '</option>');
})
}
} )*/
showArea(0,'#province')
})
function showArea(selectId,area){
$.ajax({
type: "GET",//get请求方式
url: "CityController.do?",//请求的servlet
data: "parentid="+selectId,//参数
dataType: "json",//返回的数据类型,这样就可以直接用了,不用转换了
success: function (info) {//后端返回来的信息
$(area).html("<option>--请选择--</option>");
$.each(info, function (i, e) {
// 加载完毕省份之后要知道用户选择了那个省,那怎么实现呢?onchange()
$(area).append('<option value="' + e.areaid + '">' + e.areaname + '</option>');
})
}
}
)
}
/* function showCity(selectId){
$.ajax({
type: "GET",//get请求方式
url: "CityController.do?",//请求的servlet
data: "parentid="+selectId,//参数
dataType: "json",//返回的数据类型,这样就可以直接用了,不用转换了
success: function (info) {//后端返回来的信息
$("#city").html("<option>--请选择--</option>");
$.each(info, function (i, e) {
// 加载完毕省份之后要知道用户选择了那个省,那怎么实现呢?onchange()
$("#city").append('<option value="' + e.areaid + '">' + e.areaname + '</option>');
})
}
}
)
//alert(selectId);
}
*/
/* function showRegion(selectId){
$.ajax({
type: "GET",//get请求方式
url: "CityController.do?",//请求的servlet
data: "parentid="+selectId,//参数
dataType: "json",//返回的数据类型,这样就可以直接用了,不用转换了
success: function (info) {//后端返回来的信息
$("#region").html("<option>--请选择--</option>");
$.each(info, function (i, e) {
// 加载完毕省份之后要知道用户选择了那个省,那怎么实现呢?onchange()
$("#region").append('<option value="' + e.areaid + '">' + e.areaname + '</option>');
})
}
}
)
//alert(selectId);
}*/
</script>
</head>
<body>
<%--<select id="province" onchange="showCity(this.value)">
<option>--请选择--</option>
</select>
<select id="city" onchange="showRegion(this.value)">
<option>--请选择--</option>
</select>
<select id="region">
<option>--请选择--</option>
</select>--%>
<select id="province" onchange="showArea(this.value,'#city')">
<option>--请选择--</option>
</select>
<select id="city" onchange="showArea(this.value,'#region')">
<option>--请选择--</option>
</select>
<select id="region">
<option>--请选择--</option>
</select>
</body>
</html>
后端代码就是简单的查询数据库,然后传到前端,不一一展示了;