我目前正在开展一个库存管理项目。我在Netbeans平台上使用JSP和MySQL。在我的查询项目中,我需要从数据库中检索值并将其显示在表中。要显示的行在我的页面中应该是动态的。它们应该以任何数字显示。假设当我想根据我选择的特定选项检索值时,我应该能够根据选择显示所有数据并将其显示在表的行中。我无法在表格的多行中显示它,因为我使用文本框来显示值。 以下是代码段:
<table>
<tr>
<td>
<select name="choice_type">
<option>select</option>
<option value="part_type">part_type</option>
<option value="category">category</option>
<option value="names">names</option>
</select>
</td>
</tr>
<tr>
<th>VAL</th>
<th>VAL DESC</th>
</tr>
<tr>
<td> <input type="text" name="val" id="val" size="15" /></td>
<td> <input type="text" name="val_desc" id="val_desc" size="15" /></td>
</tr>
</table>
<input type="submit" name="Query" value="Query" onClick="getData();"/>
getData()函数如下:
function getData(){
xmlHttp=GetXmlHttpObject()
var id=document.getElementById("choice_type").value;
var url="choice_retrieval.jsp";//The code for this file is defined below
url=url+"?choice_type="+id;
xmlHttp.onreadystatechange=stateChanged
xmlHttp.open("GET",url,true)
xmlHttp.send(null);
}
function stateChanged(){
if(xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){
var showdata = xmlHttp.responseText;
var strar = showdata.split(":");
if(strar.length>1){
var strname = strar[1];
document.getElementById("val").value= strar[1];
document.getElementById("val_desc").value= strar[2];
}
}
choice_retrieval.jsp的代码段如下:
<%
String ch = request.getParameter("choice_type").toString();
System.out.println(ch);
String data ="";
try{
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://", "", "");
Statement st=con.createStatement();
ResultSet rs=st.executeQuery("select * from master_panel where choice_type='"+ch+"'");
while(rs.next())
{
data = ":" + rs.getString("val") + ": " + rs.getString("val_desc");
}
out.println(data);
System.out.println(data);
}
catch(Exception e) {
System.out.println(e);
}
%>
这里使用的数据库表是master_panel(choice_type varchar,val varchar,val_desc varchar)。到目前为止我还没有任何限制。基于choice_type值,我需要从数据库中检索相应的数据(val和val_desc)并将其显示在动态行中。
答案 0 :(得分:4)
假设正在返回数据(正在调用您的stateChanged
方法),您需要通过修改stateChanged
方法动态创建表行(及其内容,文本框)。 DOM。
要修改DOM以创建表结构,代码应该读取这样的内容(假设您已经删除了以前显示的行):
var table = document.getElementById('tableId');
var data = xmlHttp.responseText.split(":");
for (int i = 0; i < data.length; i + 2)
{
var valueText = document.createElement('input');
valueText.type = 'text';
valueText.name = 'value' + i;
valueText.value = data[i];
var valueCell = document.createElement('td');
valueCell.appendChild(valueText);
var descriptionText = document.createElement('input');
descriptionText.type = 'text';
descriptionText.name = 'value' + i;
descriptionText.value = data[i + 1];
var descriptionCell = document.createElement('td');
descriptionCell.appendChild(descriptionText);
var tableRow = document.createElement('tr');
tableRow.appendChild(valueCell);
tableRow.appendChild(descriptionCell);
table.tBodies[0].appendChild(tableRow);
}
另外,正如@TrueDub所说,将SQL放入JSP中并不是出于各种原因。更糟糕的是使用字符串连接构建SQL查询 - 它会使系统打开SQL注入攻击,尤其是当连接的字符串包含在浏览器中捕获的字符串时。
答案 1 :(得分:0)
你在那里做了很多错事,尤其是在JSP中有数据库代码,但是为了回答你的具体问题,你应该将结果集写入列表并将此列表设置为具有特定id的请求范围。然后,您可以使用JSTL标记对其进行迭代,并使用{}表示法显示输出。