【问题标题】:Retrieve data from database and display it dynamically in the rows of the table using textboxes从数据库中检索数据并使用文本框将其动态显示在表的行中
【发布时间】:2012-03-13 16:01:32
【问题描述】:

我目前正在从事一个库存管理项目。我在 Netbeans 平台上使用 JSP 和 MySQL。在我的查询项目中,我需要从数据库中检索值并将其显示在表中。要显示的行在我的页面中应该是动态的。它们应该以任意数量显示。假设当我想根据我选择的特定选项检索值时,我应该能够根据选择显示所有数据并将其显示在表的行中。我无法在表格的多行中显示它,因为我使用文本框来显示值。 这是代码sn-p:

<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 的代码 sn-p 如下:

<%
    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)并将其显示在动态行中。

【问题讨论】:

    标签: java mysql jsp netbeans


    【解决方案1】:

    假设正在返回数据(正在调用您的 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 注入攻击,尤其是当连接的字符串包含在浏览器中捕获的字符串时。

    【讨论】:

      【解决方案2】:

      您在那里做错了很多事情,尤其是在 JSP 中包含数据库代码,但要回答您的具体问题,您应该将结果集写入一个列表,并将此列表设置为具有特定 ID 的请求范围。然后,您可以使用 JSTL 标记对其进行迭代,并使用 {} 表示法显示输出。

      【讨论】:

      • 同意做错的事情的数量,但看起来@Neal 正在尝试在客户端加载页面后执行 Ajax 调用(请参阅 getData 方法),因此 JSTL不是前进的方向。
      • @TrueDub :为了从服务器上的数据库中检索数据,我正在对服务器进行 AJAX 调用。如果我错了,请帮助我。我的目标是将数据显示到表格的行(文本框)中。我是 JSP 的新手,所以如果你能给我提供任何与此相关的示例教程,那将对我有很大帮助。
      • @Nick Holt : 如果你能给我提供一个演示上述概念的示例教程,那将对我有很大帮助。谢谢
      • 查看关于 JSTL SQL 标签的教程 - docs.oracle.com/javaee/1.4/tutorial/doc/JSTL7.html
      猜你喜欢
      • 2013-03-23
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 2014-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多