[英]Local variable cannot be resolved?
In this code, I am putting the values of MySQL database into String array(list[count])
and count=number
of rows in table in database. 在这段代码中,我将MySQL数据库的值放入
String array(list[count])
并且count=number
数据库中表的行count=number
。 And while I am applying for-loop
to print these values in the drop-down list in javascript, using j
variable, compiler is not able to recognize the j
. 而且,当我申请
for-loop
在JavaScript中的下拉列表,打印这些值使用j
变量,编译器不能识别j
。 I am not able to understand why. 我不明白为什么。 Please help me.
请帮我。
<%@page import="java.sql.DriverManager"%>
<%@page import="com.mysql.jdbc.Driver"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.ResultSet"%>
<html>
<body>
<br/>
<br/>
<div align="center"><h1>Task Assignment</h1></div>
<form name="taskassignment"><div align="center"><table>
<tr><td><font size="5">Person(s)</font></td><td><select id="person"></select></td></tr>
<tr><td><font size="5">Task(s)</font></td><td><select name="task"></select></td></tr>
<tr><td></td><td><input type="submit" value="Assign" name="assigntask"/></td></tr></div></table></form>
<%
DriverManager.registerDriver(new Driver());
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/BI","root","mayur");
String query = "select name from records";
PreparedStatement stmt = conn.prepareStatement(query);
ResultSet rs = stmt.executeQuery();
int count =0;
while(rs.next())
{
count++;
}
String[] list = new String[count];
int i=0;
rs.beforeFirst();
while(rs.next())
{
list[i] = rs.getString(1);
out.println(list[i]);
i++;
}
%>
<script>
function myFunction()
{
for(var j=1;j<=<%=list.length%>;j++)
{
var x = document.getElementById("person");
var opt = document.createElement("option");
opt.text = '<%=list[j]%>';
opt.value = '<%=list[j]%>';
x.add(opt);
}
}
window.onload = myFunction;
</script>
</body>
</html>
Consider this jsp scriplet to fill your select. 考虑使用此jsp脚本片段来填充您的选择。 I used comment to highlight things of notice.
我用评论来强调注意事项。 Once you have this working make sure to read on JSTL - Scriplets are very oldschool.
完成这项工作后,请务必阅读JSTL-Scriplets非常古老。
<select id="person">
<%
//no longer needed for 99% of jdbc drivers
DriverManager.registerDriver(new Driver());
//Dont EVER post realusernames/passwords!
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/BI","root","mayur");
String query = "select name from records";
PreparedStatement stmt = conn.prepareStatement(query);
ResultSet rs = stmt.executeQuery();
while(rs.next()) {
String item = rs.getString(1);
//now produce html select
%><option value='<%= item %>'><%= item %></option><%
}
rs.close ();
stmt.close ();
conn.close ();
%>
</select>
More notes: 更多说明:
Hi Mayur i changed the query as per my table and also little bit code. 嗨,Mayur,我根据我的表和一点点代码更改了查询。 Please modify it as per requirement.
请根据要求进行修改。 I tested in my local & it is adding all the fields.It will work but as Jan suggested refer JSTL also , as scriptlets are hard to maintain
我在本地测试并添加了所有字段。它将起作用,但正如Jan所建议的那样,请参考JSTL,因为难以维护脚本
<%@page import="java.sql.DriverManager"%>
<%@page import="com.mysql.jdbc.Driver"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.util.*"%>
<html>
<body>
<br/>
<br/>
<div align="center"><h1>Task Assignment</h1></div>
<%
String hiddenResult = "";
DriverManager.registerDriver(new Driver());
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/wiprodb","root","1234");
String query = "select state from state_tb";
PreparedStatement stmt = conn.prepareStatement(query);
ResultSet rs = stmt.executeQuery();
int count =0;
while(rs.next())
{
hiddenResult = hiddenResult+ (rs.getString(1))+",";
}
hiddenResult = hiddenResult.substring(0, hiddenResult.length()-1);
%>
<form name="taskassignment">
<input type="hidden" id="hiddenDDResult" name="hiddenDDResult" value="<%=hiddenResult%>" />
<div align="center">
<table>
<tr>
<td><font size="5">Person(s)</font></td>
<td><select id="person"></select></td>
</tr>
<tr>
<td><font size="5">Task(s)</font></td>
<td><select name="task"></select></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Assign" name="assigntask"/></td>
</tr>
</table>
</div>
</form>
<script>
function myFunction()
{
var ddResult = document.getElementById("hiddenDDResult").value;
var ddElement = document.getElementById("person");
var tempValue = ddResult.split(",");
//alert('ddResult'+ddResult);
for(var i=0;i<tempValue.length;i++)
{
var opt = document.createElement("option");
opt.text = tempValue[i];
opt.value = tempValue[i];
ddElement.add(opt);
}
}
myFunction();
</script>
</body>
</html>
Not tested, but something like below should work 未经测试,但下面类似的东西应该可以
<%@page import="java.sql.DriverManager"%>
<%@page import="com.mysql.jdbc.Driver"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.ResultSet"%>
<html>
<body>
<br/>
<br/>
<div align="center"><h1>Task Assignment</h1></div>
<form name="taskassignment"><div align="center"><table>
<tr><td><font size="5">Person(s)</font></td><td>
<select id="person">
<%
DriverManager.registerDriver(new Driver());
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/BI","root","mayur");
String query = "select name from records";
PreparedStatement stmt = conn.prepareStatement(query);
ResultSet rs = stmt.executeQuery();
int count =0;
while(rs.next())
{
count++;
}
String[] list = new String[count];
int i=0;
rs.beforeFirst();
while(rs.next())
{
list[i] = rs.getString(1);
out.println(list[i]);
%>
<option value='<%=list[i]%>'><%=list[i]%></option>
<%
i++;
}
%>
</select>
</td></tr>
<tr><td><font size="5">Task(s)</font></td><td><select name="task"></select></td></tr>
<tr><td></td><td><input type="submit" value="Assign" name="assigntask"/></td></tr></div></table></form>
</body>
</html>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.