2012-03-13 102 views
7

我目前工作的一个库存管理项目表中的行动态显示。我在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)并将其显示在动态行中。

回答

4

假设正在返回的数据(被调用的方法stateChanged),则需要通过修改DOM动态创建一个在您stateChanged方法表行(和它们的内容,文本框)。

要修改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注入攻击,特别是当连接的字符串包含在浏览器中捕获的字符串时。

0

你做了不少事情不对劲的地方,尤其是具有在JSP中的数据库代码,但回答您的具体问题,你应该写你的结果集到一个列表中,并设置这个名单到请求范围与一个特定ID 。然后您可以使用JSTL标记遍历它并使用{}表示法显示输出。

+0

商定了事物的数量正在做错误的,但它看起来像@Neal试图执行一个Ajax调用(见GetData方法),一旦页面已经加载客户端,所以JSTL不是前进的方向。 – 2012-03-13 16:32:31

+0

@TrueDub:从服务器上的数据库中检索数据我正在向服务器发出AJAX调用。如果我错了,请帮助我。我的目标是在表格的行(文本框)中显示数据。我对JSP很陌生,所以如果你能给我提供任何有关这个示例的示例教程,那对我来说都是很有帮助的。 – Neal 2012-03-13 16:44:08

+0

@尼克霍尔特:如果你能给我提供一个示范上述概念的示例教程,那对我来说会很有帮助。 Thanx – Neal 2012-03-13 17:32:06

相关问题