0

誰かが私を正しい方向に導いてくれることを願っています。私がやろうとしているのは、2 つ目のドロップダウン リスト (都市) が最初のもの (州) に依存する 2 つのドロップダウン リストを作成することです。たとえば、ワシントンをクリックすると、2 番目のドロップダウン メニューにシアトルとワラ ワラルが表示されます。ジョージア、アトランタ、アテネなど。最終的に私の目標は、いくつかのリストをリンクすることです (国 -> 州 -> 郡 -> 都市)。

これまでのところ、2 つのデータベースがセットアップされています。列として cityid (プライマリ) と cityname を持つテーブル CITY と、列として stateid (プライマリ) と statename を持つテーブル STATE。

次のようなコード

ドロップダウン.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>

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);
    }
}

while ループで何らかの if ステートメントが必要であることはわかっていますが、stateid と cityid を比較するためのパラメーターをどこから取得しているのかわかりません。

どんなガイダンスも感謝します、ありがとう。

4

1 に答える 1

0

設計には根本的な問題があります。現在のデータベース設計では、どの都市がどの州に属しているかを知る方法がありません。

テーブルは次のようになります。

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
于 2012-11-25T08:51:09.807 に答える