设计一个页面包含一个列表框和一个form.本意是想通过对列表框中数据项的选择,来达到更新查询,在表格中能动态显示所选中的数据项的记录。但实现时发现表格的记录不会自动改变。现求助于高手jsp文件如下:<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<%@ page import="java.lang.Math.*"%>
<%@ page import="java.util.*"%><%!
  ResultSet rs=null;
  String sql=null;
  int curr_labid=0;
  int lid=0;
 %>
 
<html>  
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>实验室基本信息查询</title><Script language="JavaScript">
function mysubmit(){
  document.myform.submit();
}
</Script>
 
</head><body>
<center><form name="myform" action="book.jsp" method="post">
 
 <%
     Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
     Connection conn=java.sql.DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=DB","sa","");
    Statement stmt=conn.createStatement();
      
 %>
 
  
   <%   
   sql="select * from Lab";
     try{
          rs=stmt.executeQuery(sql);
         } 
     catch(Exception e)
{
         out.println("访问实验室数据出错!");
         return;
         }%>
   请选择要预约的实验室:
 <select name=labid onChange="mysubmit()">  
  <% while(rs.next())
   {
      int tmplabid=rs.getInt("Lid");
      if(curr_labid==0)
         {curr_labid=tmplabid;}
      if(curr_labid!=0&&curr_labid==tmplabid){
         out.println("<option value="+tmplabid+"selected>"+rs.getString("Lname")+"</option>");
        }else
         {out.println("<option value="+tmplabid+">"+rs.getString("Lname")+"</option>");}
     
   }
   %>
   </select> 
 </form>
 
   <hr>
    <table width=640 cellSpacing =1 cellPadding=3 border=0>
<TR align=middle>
<TH >实验室编号</TH>
<TH >实验室名称</TH>
<TH >实验室简介</TH>
<TH >预约</TH>
</TR>
<%
 sql="select * from Lab where Lid="+curr_labid;
 ResultSet rst=stmt.executeQuery(sql);
%>
<%
int t_labid=0;
String t_labname=null;
String t_labintro=null;
while(rst.next()){
%>
  <TR align=center>
  <TD>
  <%
    t_labid=rst.getInt("Lid");
    out.println(t_labid);
  %>  </TD>
  <TD>
  <%
    t_labname=rst.getString("Lname");
    out.println(t_labname);
  %>  </TD>
  <TD>
  <%
    t_labintro=rst.getString("Lintro");
    out.println(t_labintro);
  %>  </TD> 
  
  <TD width="69">
   
    <A href=book1.jsp>预约</A>
  
  </TD>
    
  </TR>
  <%
  }
  %>
  
  </table>
  <%
    session.setAttribute("lid",curr_labid); 
  %>
</center>
  <hr> 
</body>
</html>

解决方案 »

  1.   

    <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
    <%@ page import="java.lang.Math.*"%>
    <%@ page import="java.util.*"%><%!
      ResultSet rs=null;
      String sql=null;
      int curr_labid=0;
      //add begin
      if(request.getParameter("labid")!=null)
        curr_labid = Integer.parseInt((String)request.getParameter("labid"));
      //add end
      int lid=0;
      
     %>
     
    <html>  
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>实验室基本信息查询</title><Script language="JavaScript">
    function mysubmit(){
      document.myform.submit();
    }
    </Script>
     
    </head><body>
    <center><form name="myform" action="book.jsp" method="post">
     
     <%
         Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
         Connection conn=java.sql.DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=DB","sa","");
        Statement stmt=conn.createStatement();
          
     %>
     
      
       <%   
       sql="select * from Lab";
         try{
              rs=stmt.executeQuery(sql);
             } 
         catch(Exception e)
    {
             out.println("访问实验室数据出错!");
             return;
             }%>
       请选择要预约的实验室:
     <select name=labid onChange="mysubmit()">  
      <% while(rs.next())
       {
          int tmplabid=rs.getInt("Lid");
          if(curr_labid==0)
             {curr_labid=tmplabid;}
          if(curr_labid!=0&&curr_labid==tmplabid){
             out.println("<option value="+tmplabid+"selected>"+rs.getString("Lname")+"</option>");
            }else
             {out.println("<option value="+tmplabid+">"+rs.getString("Lname")+"</option>");}
         
       }
       %>
       </select> 
     </form>
     
       <hr>
        <table width=640 cellSpacing =1 cellPadding=3 border=0>
    <TR align=middle>
    <TH >实验室编号</TH>
    <TH >实验室名称</TH>
    <TH >实验室简介</TH>
    <TH >预约</TH>
    </TR>
    <%
     sql="select * from Lab where Lid="+curr_labid;
     ResultSet rst=stmt.executeQuery(sql);
    %>
    <%
    int t_labid=0;
    String t_labname=null;
    String t_labintro=null;
    while(rst.next()){
    %>
      <TR align=center>
      <TD>
      <%
        t_labid=rst.getInt("Lid");
        out.println(t_labid);
      %>  </TD>
      <TD>
      <%
        t_labname=rst.getString("Lname");
        out.println(t_labname);
      %>  </TD>
      <TD>
      <%
        t_labintro=rst.getString("Lintro");
        out.println(t_labintro);
      %>  </TD> 
      
      <TD width="69">
       
        <A href=book1.jsp>预约</A>
      
      </TD>
        
      </TR>
      <%
      }
      %>
      
      </table>
      <%
        session.setAttribute("lid",curr_labid); 
      %>
    </center>
      <hr> 
    </body>
    </html>
      

  2.   

    你的下拉框中是不是只有一个值?
    select的onChange方法是值改变了之后才响应
    <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
    <%@ page import="java.lang.Math.*"%>
    <%@ page import="java.util.*"%><%!
      ResultSet rs=null;
      String sql=null;
      int curr_labid=0;
      //add begin
      if(request.getParameter("labid")!=null)
        curr_labid = Integer.parseInt((String)request.getParameter("labid"));
      //add end
      int lid=0;
      
     %>
     
    <html>  
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>实验室基本信息查询</title><Script language="JavaScript">
    function mysubmit(){
      document.myform.submit();
    }
    </Script>
     
    </head><body>
    <center><form name="myform" action="book.jsp" method="post">
     
     <%
         Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
         Connection conn=java.sql.DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=DB","sa","");
        Statement stmt=conn.createStatement();
          
     %>
     
      
       <%   
       sql="select * from Lab";
         try{
              rs=stmt.executeQuery(sql);
             } 
         catch(Exception e)
    {
             out.println("访问实验室数据出错!");
             return;
             }%>
       请选择要预约的实验室:
     <select name=labid onChange="mysubmit()"> 
      <% while(rs.next())
       {
          int tmplabid=rs.getInt("Lid");
          if(curr_labid==0)
             {curr_labid=tmplabid;}
          if(curr_labid!=0&&curr_labid==tmplabid){
             out.println("<option value=''></option>");
             out.println("<option value="+tmplabid+"selected>"+rs.getString("Lname")+"</option>");
            }else
             {
            out.println("<option value=''></option>");
            out.println("<option value="+tmplabid+">"+rs.getString("Lname")+"</option>");}
        
       }
       %>
       </select> 
     </form>
     
       <hr>
        <table width=640 cellSpacing =1 cellPadding=3 border=0>
    <TR align=middle>
    <TH >实验室编号</TH>
    <TH >实验室名称</TH>
    <TH >实验室简介</TH>
    <TH >预约</TH>
    </TR>
    <%
     sql="select * from Lab where Lid="+curr_labid;
     ResultSet rst=stmt.executeQuery(sql);
    %>
    <%
    int t_labid=0;
    String t_labname=null;
    String t_labintro=null;
    while(rst.next()){
    %>
      <TR align=center>
      <TD>
      <%
        t_labid=rst.getInt("Lid");
        out.println(t_labid);
      %>  </TD>
      <TD>
      <%
        t_labname=rst.getString("Lname");
        out.println(t_labname);
      %>  </TD>
      <TD>
      <%
        t_labintro=rst.getString("Lintro");
        out.println(t_labintro);
      %>  </TD> 
      
      <TD width="69">
       
        <A href=book1.jsp>预约</A>
      
      </TD>
        
      </TR>
      <%
      }
      %>
      
      </table>
      <%
        session.setAttribute("lid",curr_labid); 
      %>
    </center>
      <hr> 
    </body>
    </html>
      

  3.   

    我刚才想了一下,感觉像是
    <%
     sql="select * from Lab where Lid="+curr_labid;
     ResultSet rst=stmt.executeQuery(sql);
    %>这里的curr_labid不会随列表框选项的改变而改变,一直都是指向一个固定值
      

  4.   

    int curr_labid=0;
      //add begin
      if(request.getParameter("labid")!=null)
        curr_labid = Integer.parseInt((String)request.getParameter("labid"));
      //add end
    这个地方不是重新取了选择狂的值吗?
    对了,你改变选择框的值后,页面刷新了没有?
      

  5.   

    Bingo~~~~谢谢,我又弄了一会可以了~~~
    把新代码给你看一下
    <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
    <%@ page import="java.lang.Math.*"%>
    <%@ page import="java.util.*"%>
    <jsp:useBean id="conn" scope="application" class="jsp.db_conn"/>
    <%!
      ResultSet rs=null;
      String sql=null;
      int curr_labid=0;
    %>
    <%  
        if(request.getParameter("labid")!=null)
    curr_labid=Integer.parseInt((String)request.getParameter("labid"));  
    %>
     
    <html>  
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>实验室基本信息查询</title><Script language="JavaScript">
    function mysubmit(){
      document.myform.submit();
    }
    </Script>
     
    </head><body>
    <center><form name="myform" action="book.jsp" method="post">
       <%   
       sql="select * from Lab";
         try{
              rs=conn.executeQuery(sql);
             } 
         catch(Exception e)
    {
             out.println("访问实验室数据出错!");
             return;
             }%>
       请选择要预约的实验室:
     <select name=labid onChange="mysubmit()"> 
      <% while(rs.next())
       {
          int tmplabid=rs.getInt("Lid");
          if(curr_labid==0)
             {curr_labid=tmplabid;}
          if(curr_labid!=0&&curr_labid==tmplabid){
             out.println("<option value=''></option>");
             out.println("<option value="+tmplabid+" selected>"+rs.getString("Lname")+"</option>");
            }else
             {
            out.println("<option value="+tmplabid+">"+rs.getString("Lname")+"</option>");}
        
       }
       %>
       </select> 
     </form>
     
       <hr>
        <table width=640 cellSpacing =1 cellPadding=3 border=0>
    <TR align=middle>
    <TH >实验室编号</TH>
    <TH >实验室名称</TH>
    <TH >实验室简介</TH>
    <TH >预约</TH>
    </TR>
    <%
     sql="select * from Lab where Lid="+curr_labid;
     rs=conn.executeQuery(sql);
    %>
    <%
    int t_labid=0;
    String t_labname=null;
    String t_labintro=null;
    while(rs.next()){
    %>
      <TR align=center>
      <TD>
      <%
        t_labid=rs.getInt("Lid");
        out.println(t_labid);
      %>  </TD>
      <TD>
      <%
        t_labname=rs.getString("Lname");
        out.println(t_labname);
      %>  </TD>
      <TD>
      <%
        t_labintro=rs.getString("Lintro");
        out.println(t_labintro);
      %>  </TD> 
      
      <TD width="69">
       
        <A href=book1.jsp>预约</A>
      
      </TD>
        
      </TR>
      <%
      }
      %>
      
      </table>
      <%
        session.setAttribute("lid",curr_labid); 
      %>
    </center>
      <hr> 
    </body>
    </html>
      

  6.   

    onChange改成onchange试试,其他地方还没看,HOHO~