Java 使用AJAX和数据库的动态下拉列表

Java 使用AJAX和数据库的动态下拉列表,java,ajax,jsp,drop-down-menu,Java,Ajax,Jsp,Drop Down Menu,我希望有人能指引我正确的方向。我想做的是创建两个下拉列表,其中第二个(城市)依赖于第一个(州)。例如,当我点击华盛顿时,我想在第二个下拉菜单中列出西雅图和瓦拉瓦拉;乔治亚州、亚特兰大、雅典等。最终我的目标是将几个列表链接在一起(国家->州->县->市),但如果我能让这两个工作正常,我想我能想出办法 到目前为止,我已经建立了两个数据库。列为cityid(主)和cityname的表CITY,列为stateid(主)和statename的表STATE 代码如下 dropDown.jsp: <sc

我希望有人能指引我正确的方向。我想做的是创建两个下拉列表,其中第二个(城市)依赖于第一个(州)。例如,当我点击华盛顿时,我想在第二个下拉菜单中列出西雅图和瓦拉瓦拉;乔治亚州、亚特兰大、雅典等。最终我的目标是将几个列表链接在一起(国家->州->县->市),但如果我能让这两个工作正常,我想我能想出办法

到目前为止,我已经建立了两个数据库。列为cityid(主)和cityname的表CITY,列为stateid(主)和statename的表STATE

代码如下

dropDown.jsp:

<script>
function createRequestObject(){
    var req;
    if(window.XMLHttpRequest){
        //For Firefox, Safari, Opera
        req = new XMLHttpRequest();
    } else if(window.ActiveXObject){
        //For IE 5+
        req = new ActiveXObject("Microsoft.XMLHTTP");
    } else {
        //Error for an old browser
        alert('Your browser is not IE 5 or higher, or Firefox or Safari or Opera');
    }
    return req;
}

//Make the XMLHttpRequest Object
var http = createRequestObject();
function sendRequest(method, url){
    if(method == 'get' || method == 'GET'){
        http.open(method,url);
        http.onreadystatechange = handleResponse;
        http.send(null);
    }
}//end function send

function handleResponse(){
    if(http.readyState == 4 && http.status == 200){
        var response = http.responseText;
        if(response){
            document.getElementById("second_dropdown_code").innerHTML = response;
        }
    }
}

function getCityDropdown() {
    var w = document.myform.mylist.selectedIndex;
    var country_id = document.myform.mylist.options[w].value;
    sendRequest('GET','getCites.do?stateid=' + state_id);
}

</script>

<FORM NAME="myform">
<SELECT NAME="state" onChange="getCityDropdown()">
    <OPTION VALUE="1">Georgia</option>
    <OPTION VALUE="2">Washington</option>
</SELECT>
</FORM>
<div id="second_dropdown_code"></div>

函数createRequestObject(){
var-req;
if(window.XMLHttpRequest){
//对于Firefox、Safari和Opera
req=新的XMLHttpRequest();
}else if(window.ActiveXObject){
//对于IE 5+
req=新的ActiveXObject(“Microsoft.XMLHTTP”);
}否则{
//旧浏览器的错误
警报(“您的浏览器不是IE 5或更高版本,也不是Firefox、Safari或Opera”);
}
返回请求;
}
//生成XMLHttpRequest对象
var http=createRequestObject();
函数sendRequest(方法、url){
if(method=='get'| | method=='get'){
open(方法,url);
http.onreadystatechange=handleResponse;
http.send(空);
}
}//结束函数发送
函数handleResponse(){
如果(http.readyState==4&&http.status==200){
var response=http.responseText;
如果(答复){
document.getElementById(“第二个下拉列表代码”).innerHTML=响应;
}
}
}
函数getCityDropdown(){
var w=document.myform.mylist.selectedIndex;
var country\u id=document.myform.mylist.options[w].value;
sendRequest('GET','getCites.do?stateid='+state_id);
}
佐治亚州
华盛顿
getCities.java

protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    try {
        processRequest(request, response);

        String sql = "select * from CITY";
        Connection connection = datasource.getConnection();
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        ResultSet resultSet = preparedStatement.executeQuery();

        while (resultSet.next() ) {
            //out.println(resultSet.getInt("cityid") + "<br/>" + resultSet.getString("city") + "<br/>" + resultSet.getString("INSTRUCTOR") + "<br/>" + resultSet.getString("BUILDING") + "<br/>" + resultSet.getString("ROOM") + "<br/>");
            //out.println(resultSet.getInt("cityid") + "<br/>" + resultSet.getString("city") + "<br/>" );
            //out.println("<select name=\"city\"><option value=\"1\">Atlanta</option><option value=\"2\">Walla Walla</option></select> ");
        }

        resultSet.close();
        preparedStatement.close();
        connection.close();

    } catch (SQLException ex) {
        Logger.getLogger(getCities.class.getName()).log(Level.SEVERE, null, ex);
    }
}
protectedvoid doGet(HttpServletRequest请求,HttpServletResponse响应)
抛出ServletException、IOException{
PrintWriter out=response.getWriter();
试一试{
processRequest(请求、响应);
String sql=“选择*来自城市”;
Connection=datasource.getConnection();
PreparedStatement PreparedStatement=connection.prepareStatement(sql);
ResultSet ResultSet=preparedStatement.executeQuery();
while(resultSet.next()){
//out.println(resultSet.getInt(“cityid”)+“
”+resultSet.getString(“city”)+“
”+resultSet.getString(“讲师”)+“
”+resultSet.getString(“建筑”)+“
”+resultSet.getString(“房间”)+“
”; //out.println(resultSet.getInt(“cityid”)+“
”+resultSet.getString(“city”)+”
); //out.println(“AtlantaWalla Walla”); } resultSet.close(); preparedStatement.close(); connection.close(); }catch(SQLException-ex){ getLogger.getLogger(getCities.class.getName()).log(Level.SEVERE,null,ex); } }
我知道我需要在while循环中使用某种if语句,但我不确定从何处获取参数来比较stateid和cityid


任何指导都可以,谢谢。

设计中有一个基本问题:根据您当前的数据库设计,无法知道哪些城市属于哪个州

这些表应该如下所示:

State
    - id
    - name

City
    - id
    - name
    - state_id (foreign key to State.id)
因此,获取给定州ID的城市的SQL查询如下所示:

select city.id, city.name from city
where city.state_id = ?
order by city.name

您是否在询问如何从jsp页面获取参数并在servlet sql查询中使用该值?