缩小JSP中的下拉搜索并使用mysql db

时间:2013-12-20 11:30:53

标签: java mysql jsp

<% 
ResultSet rsta=st.executeQuery("SELECT DISTINCT user_type FROM details where user_type not like 'null'");
while(rsta.next()) {
    out.write("<option value=" + rsta.getString("user_type") + ">" + rsta.getString("user_type") + "</option>");
}
%>
</select>
<label>Sct</label><select name="sct" id="subject" >
  <option selected="true" style="display:none;">Select Sct</option>
 <%  
  ResultSet rsta1=st.executeQuery("SELECT DISTINCT sct,user_type FROM details where sct not like 'null'"); 
  while(rsta1.next()) {
      out.write("<option value=" + rsta1.getString("sct") + ">" + rsta1.getString("sct") + "</option>");
  }
%> 
</select>
<label>Standard:</label><select name="standard" id="standard" >
<option selected="true" style="display:none;">Select Standard</option>
<% 
ResultSet rsta2=st.executeQuery("Select DISTINCT standard from details where standard not like 'null'");   
while(rsta2.next()) {
    out.write("<option value=" + rsta2.getString("standard") + ">" + rsta2.getString("standard") + "</option>");
}
%>
</select>
<label>Division:</label><select name="division"id="division" >
<option selected="true" style="display:none;">Select Division</option>
<%
ResultSet rsta3=st.executeQuery("Select DISTINCT division from details where division not like 'null'");   
while(rsta3.next()) {
    out.write("<option value=" + rsta3.getString("division") + ">" + rsta3.getString("division") + "</option>");
}
%>
</select>

这些是4个选择字段。所有4个从mysql数据库中获取列表。 但是所有选择都会从数据库中获取所有可能的值,具体取决于所选的列。

我举一个例子 在进入数据库时​​,假设我添加了4列a,1,cat,milk 第2行由b,2,dog,bone组成。

现在在上面的代码中,我将进入第一个选择(a,b),第二个选择(1,2)等等。

我希望搜索范围缩小,如果我在第一个选择中选择1,则应该在第二个中出现n,在第三个中出现cat。我应该如何做到这一点。 我正在使用JSP

2 个答案:

答案 0 :(得分:2)

我首先建议你阅读一本关于JSP封面的书。我们通常不再在JSP页面中嵌入scriplets(&lt; %%&gt;)。在amazon.com上搜索关于JSP的初级书籍,这些书籍有很好的评论并且在过去一年左右发布。这本书很可能也涵盖了servlet。你也可以阅读JSTL。阅读这本书可以为您节省无数个小时在线处理代码片段并提出问题的麻烦。随着时间的推移,你应该阅读很多关于Java和相关技术的书籍
话虽如此:
JSP页面(表示层)负责显示数据和处理用户事件(鼠标点击等)。页面中应该没有业务逻辑或数据库逻辑。在一个非常基本的设计中,您有一个且只有一个与许多JSP页面通信的servlet。当一个人在他的浏览器中输入url时,请求将转到servlet。 servlet调用业务逻辑,业务逻辑又调用数据库以获取最初填充JSP页面所需的所有数据。 servlet将数据放入请求范围(或会话范围),然后调度到JSP页面。 JSP页面从请求范围获取数据以填充自身
回答你的问题:通过servlet填充初始页面加载(SQL调用)时的第一个下拉列表。其他下拉框将为空。当用户在第一个下拉列表中进行选择时,将页面提交给servlet。 servlet将读取第一个选定的值并查询数据库以填充第二列。然后它将调度到JSP页面以在第一个和第二个下拉列表中显示数据。当用户选择第二列中的项目时,发生类似的操作
 最后:阅读数据库设计。您的数据库表应该正确规范化。此外,您不会在数据库列中存储字符串值“null”。您可以存储实际的空值。

答案 1 :(得分:0)

更专业的方法是使用ajax调用来填充下拉框,而不是重新加载整个表单。而不是原始的ajax,我会推荐JQuery,它内置了ajax。注意Ajax调用通常用于改变浏览器上的组件并避免重新填充整个表单。另一种方法是将所有下拉数据存储在多维数据库结构中,并使用oncick事件在一个下拉框中抓取所选项目以填充下一个下拉框。这样,就不需要回调服务器(它都运行在客户端)。