Vytvořím kompletní příklad pro řešení vašeho problému. Jasně jste nespecifikovali, kde dochází k chybě, a je trochu obtížné porozumět vašemu kódu.
Zkuste tento program spustit, ujišťuji vás, že váš problém jistě vyřeší a poskytne vám lepší porozumění v JSP, Servlet a DBCode.
Když spustíte tento program.
Dvě rozbalovací nabídky na stránce JSP.
1 - pro zobrazení všech stavů (výchozí dynamická hodnota načtení z databáze)
2 – pro zobrazení měst, když vyberete jakýkoli stát.
Když vyberete jakýkoli stát, město se zobrazí v rozbalovacím seznamu města a po obnovení stránky se pozice vybraného státu ustálí i v rozbalovacím seznamu států.
Stejně jako když vyberete stav, zobrazil jsem záznamy z jiné tabulky v tabulkovém formátu nebo pomocí značek table,tr,td.
Tři tabulky v databázi - Státy, město, data
Státy – pro zobrazení výchozího stavu všech států v kombinovaném stavu při spuštění příkladu. Město – když vyberete stát, město bude vycházet z vybraného státu.data – když vyberete stát, data se zobrazí v tabulkové formě (Jen byla načtena všechna data namísto založených z čehokoli).
Soubory – JSP (kód na straně klienta, serveru), Servlet (kód na straně serveru), DBCoding (kód databáze)
IDE – MyEclipseDatabase – MS SQL 2012
Kódování JSP
<%@ page language="java" import="java.util.*,DBCode.*" pageEncoding="ISO-8859-1"%>
<%@page import="java.sql.ResultSet"%>
<%
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 'MyJsp.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">
<script type="text/javascript">
function abc()
{
document.forms["formname"].submit();
}
</script>
</head>
<%
DBCoding db = new DBCoding();
ArrayList al = new ArrayList();
al = db.RetrieveStateName();
String value1="";
%>
<body>
<form action="Servlet1" method="post" name="formname" id="formname">
<select id="selectvalue" name="selectvalue" onchange="abc()";>
<%if(request.getParameter("abc")!=null)
{
String result = request.getParameter("abc");
%>
<%for(int i=0;i<al.size();i++)
{
if(al.get(i).equals(result))
{%>
<option value= "<%=al.get(i) %>" selected="selected"><%=al.get(i) %></option>
<%}
else
{%>
<option value= "<%=al.get(i) %>"><%=al.get(i) %></option>
<%} %>
<%}%>
<%}
else
{ %>
<%for(int i=0;i<al.size();i++)
{
%>
<option value= "<%=al.get(i) %>"><%=al.get(i) %></option>
<%} %>
<%} %>
</select>
<%ArrayList ob = new ArrayList(); %>
<%if(request.getAttribute("City_Name")!=null)
{
ob = (ArrayList)request.getAttribute("City_Name");
%>
<select id="selectcity" name="selectcity">
<%for(int j=0;j<ob.size();j++)
{
%>
<option><%=ob.get(j)%></option>
<%} %>
</select><br/><br/>
<table>
<tr>
<td>Id</td>
<td>Name</td>
<td>Age</td>
<td>City</td>
<%
DBCoding db2 = new DBCoding();
ArrayList al2 = new ArrayList();
ResultSet rs = db2.getTable();
while(rs.next()){
%>
<tr>
<td><%=rs.getString(1) %></td>
<td><%=rs.getString(2) %></td>
<td><%=rs.getString(3) %></td>
<td><%=rs.getString(4) %></td>
</tr>
<%
} %>
<%}
else
{
%>
<select>
<option></option>
</select>
<%} %>
</form>
</body>
</html>
Kódování servletů
import java.io.IOException;
import java.util.*;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import DBCode.DBCoding;
public class Servlet1 extends HttpServlet {
/**
* Constructor of the object.
*/
public Servlet1() {
super();
}
public void destroy() {
super.destroy();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String getstatename = request.getParameter("selectvalue");
DBCoding ob = new DBCoding();
ArrayList al = new ArrayList();
al = ob.RetrieveCityName(getstatename);
request.setAttribute("City_Name", al);
RequestDispatcher rd = request.getRequestDispatcher("MyJsp.jsp?abc="+getstatename);
rd.forward(request, response);
}
public void init() throws ServletException {
// Put your code here
}
}
DBCoding - Kód databáze
import java.sql.*;
import java.util.*;
public class DBCoding
{
Connection con;
PreparedStatement ps;
ResultSet rs;
int result=0;
public DBCoding()
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con=DriverManager.getConnection("jdbc:odbc:SearchAccount");
}
catch(Exception ee)
{}
}
public ArrayList RetrieveStateName()
{
ArrayList ob = new ArrayList();
try
{
ps = con.prepareStatement("select distinct states from States");
rs = ps.executeQuery();
while(rs.next())
{
ob.add(rs.getString(1));
}
}
catch(Exception ee)
{}
return ob;
}
public ArrayList RetrieveCityName(String statename)
{
ArrayList ob = new ArrayList();
try
{
ps = con.prepareStatement("select city from city where statename=?");
ps.setString(1,statename);
rs = ps.executeQuery();
while(rs.next())
{
ob.add(rs.getString(1));
}
}
catch(Exception ee)
{}
return ob;
}
public ResultSet getTable()
{
ResultSet rs = null;
try
{
ps = con.prepareStatement("select * from data");
rs = ps.executeQuery();
}
catch(Exception ee)
{}
return rs;
}
}
Pokud po provedení tohoto příkladu dostanete jakýkoli dotaz, pošlete mi zprávu a já to určitě vyřeším.