我在Jsp中有三个下拉列表。分支,学期和主题和价值来自MySQL。分支和学期不相互依赖。但主题价值应取决于分支和学期两者。 我做了以下代码。 问题出现了,虽然选择了分支和学期下拉值,但主题下拉值不获取均值显示空白下拉字段。
FirstTwoDropdown.jsp
<%@page import="java.sql.*"%>
<%@page import="com.connection.*"%>
<%Connection con;
ResultSet rs;
Statement st;
con = connectiondb.condb();
%>
<html>
<head>
<script language="javascript" type="text/javascript">
var xmlHttp
function showsubject(str){
if (typeof XMLHttpRequest != "undefined"){
xmlHttp= new XMLHttpRequest();
}
else if (window.ActiveXObject){
xmlHttp= new ActiveXObject("Microsoft.XMLHTTP");
}
if (xmlHttp==null){
alert("Browser does not support XMLHTTP Request")
return;
}
var url="subject.jsp";
url +="?count=" +str;
xmlHttp.onreadystatechange = stateChange1;
xmlHttp.open("GET", url, true);
xmlHttp.send(null);
}
function stateChange1(){
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){
document.getElementById("subject").innerHTML=xmlHttp.responseText
}
}
</script>
</head>
<body>
<select name='branch_name' onchange="showsemester(this.value)">
<option value="none">Select</option>
<%
st = con.createStatement();
rs = st.executeQuery("select distinct branch_name from subject_tbl");
while(rs.next()){
%>
<option value="<%=rs.getString("branch_name")%>"><%=rs.getString("branch_name")%></option>
<%
}
%>
</select>
<br>
<select name='semester' >
<option value="none">Select</option>
<%
st = con.createStatement();
rs = st.executeQuery("select distinct semester from subject_tbl");
while(rs.next()){
%>
<option value="<%=rs.getString("semester")%> on"><%=rs.getString("semester")%></option>
<%
}
%>
</select>
<select name='subject_name' >
<option value=''></option>
</select>
</body>
</html>
subject.jsp
<%@page import="java.sql.*"%>
<%@page import="com.connection.*"%>
<%
String semester=request.getParameter("semester");
String branch_name=request.getParameter("branch_name");
String buffer="<select name='subject_name'><option value=''>Select</option>";
Connection con;
ResultSet rs;
Statement st;
con = connectiondb.condb();
try{
st = con.createStatement();
rs = st.executeQuery("Select subject_name from subject_tbl where semester='"+semester+"' and branch_name='"+branch_name+"' ");
while(rs.next()){
buffer=buffer+"<option value='"+rs.getString("subject_name")+"'>"+rs.getString("subject_name")+"</option>";
}
buffer=buffer+"</select>";
response.getWriter().println(buffer);
}
catch(Exception e){
System.out.println(e);
}
%>
答案 0 :(得分:0)
就像提示:尝试将业务逻辑与JSP文件分开。
有不同的选项可以使用Servlets
,另一种方法是使用Java Bean Components。
第二个提示:关闭资源。
// Java 7 Try - with resources syntax
try (
Connection con = connectiondb.condb();
Statement st = con.createStatement();
)
{
try (ResultSet rs = st.executeQuery(...))
{
// do something with your result set
}
}
您的数据库只有有限的资源,例如 Connections , Cursors ,...
第三条提示:使用准备好的语句。否则,有人可能会使用SQL Injection攻击您的系统。
为您的问题:只是一个猜测
您从FirstTwoDropdown.jsp
检索的学期价值是“ semester-value on”,即“追加”到“从数据库中检索到的值。”
另一件事是FirstTwoDropdown.jsp
使用未在页面中定义的javascript函数showsemester
- 因此这将永远不会起作用。 showsubject
函数会发送count
未使用的查询参数subject.jsp
。