2012-03-13 105 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

相關問題