Java 使用JSP、Servlet、JQuery和非规范化Mysql表的依赖动态下拉列表
请查看下面显示的示例非规范化DB:Java 使用JSP、Servlet、JQuery和非规范化Mysql表的依赖动态下拉列表,java,jquery,mysql,jsp,servlets,Java,Jquery,Mysql,Jsp,Servlets,请查看下面显示的示例非规范化DB: |----|---------------|---------|------------------------|---------------|----------------------| | id | continent | country | state | city | street | |----|---------------|---------|------
|----|---------------|---------|------------------------|---------------|----------------------|
| id | continent | country | state | city | street |
|----|---------------|---------|------------------------|---------------|----------------------|
| 1 | North America | USA | California | San Francisco | Broadway |
| 2 | South America | Brazil | Sao Paulo | Campinas | R. Dr. Emilio Ribas |
| 3 | South America | Brazil | Sao Paulo | Campinas | R. Dr. Vieira Bueno |
| 4 | Asia | India | Maharashtra | Mumbai | C.S. |
| 5 | Asia | India | Maharashtra | Mumbai | S.V. |
| 7 | Europe | Germany | North Rhine-Westphalia | Duisburg | Essenberger |
| 8 | Europe | Germany | North Rhine-Westphalia | Bochum | Solingen |
| 9 | Europe | France | Lorraine | Toul | Dijon |
| 10 | Europe | France | Lorraine | Verdun | 50 Avenue |
| 11 | North America | USA | Massachusetts | Boston | Saint Alphonsus |
| 12 | North America | Canada | Ontario | Kingston | 1st Avenue |
| 13 | North America | Canada | Ontario | Kingston | 7th Avenue |
| 14 | North America | Canada | British Columbia | Kamloops | Albert |
| 15 | North America | USA | Massachusetts | Boston | Eliot |
|----|---------------|---------|------------------------|---------------|----------------------|
每个下拉列表的值来自上面显示的数据库。街道的价值取决于城市的价值,城市的价值取决于国家的价值,国家的价值取决于国家的价值,国家的价值取决于大陆的价值
例如:如果我选择北美作为一个大陆,那么国家的下拉列表应该只显示美国和加拿大。接下来,若我选择美国,那个么该州的下拉列表应该只显示加利福尼亚州和马萨诸塞州等等。当使用jquery/JSP/Servlet对数据库进行非规范化时,有人能帮我实现这个解决方案吗
到目前为止,我已经完成了以下编码。我使用了jquery并编写了一个jsp:
相关下拉列表
$(文档).ready(函数(){
$(“#大陆”).change(function(){fillOptions('country',this);});
$('#country').change(function(){fillOptions('state',this);});
$('#state').change(function(){fillOptions('city',this);});
$('city').change(function(){fillOptions('street',this);});
});
函数填充选项(childID、parentID){
var child=$('#'+childID);
$.getJSON('json/options?child='+childID+'&val='+$(parentID).val(),函数(opts){
$('>option',child).remove();//首先清除旧选项。
如果(选择){
$。每个(选项、功能(键、值){
附加($('').val(键).text(值));
});
}否则{
附加($('').text(“请选择父项”);
}
});
}
${option.value}
请选择家长
请选择家长
请选择家长
请选择家长
/json/options
后面的Servlet
如下所示:
import java.io.IOException;
导入java.util.Map;
导入javax.servlet.ServletException;
导入javax.servlet.annotation.WebServlet;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入org.apache.log4j.Logger;
导入com.google.gson.gson;
导入com.amey.dao.AddressDAO;
导入com.amey.dao.addressdao实现;
@WebServlet(“/CascadingDropdownController”)
公共类CascadingDropdownController扩展HttpServlet{
私有静态最终记录器LOG=Logger.getLogger(CascadingDropdownController.class.getName());
私人地址道道;
私有静态最终长serialVersionUID=1L;
公共CascadingDropdownController(){
dao=新地址dao实现();
}
/**
*@参见HttpServlet#doGet(HttpServletRequest请求,HttpServletResponse响应)
*/
受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
日志信息(“在doGet中”);
String child=request.getParameter(“child”);//要填充选项的子DD的ID。
String val=request.getParameter(“val”);//查找关联子DD选项的父DD的值。
映射选项=空;
试一试{
options=dao.find(child,val);
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
字符串json=new Gson().toJson(选项);
setContentType(“应用程序/json”);
响应。setCharacterEncoding(“UTF-8”);
response.getWriter().write(json);
}
}
老实说,我不清楚DAO的实施情况。我需要DAO逻辑方面的帮助。不同的大陆列表:
SELECT t.continent
FROM mysqltable t
GROUP
BY t.continent
特定大陆的不同国家列表:
SELECT t.country
FROM mysqltable t
WHERE t.continent = 'North America'
GROUP
BY t.continent
, t.country
特定大陆和国家的不同国家列表:
SELECT t.state
FROM mysqltable t
WHERE t.continent = 'North America'
AND t.country = 'Canada'
GROUP
BY t.continent
, t.country
, t.state