2011-10-12 38 views
0

我正在使用Spring的項目。我試圖從數據庫中獲取一組數據,並將該值顯示在文本框中,但不是給我String,而是繼續遇到NaN(不是數字)。這裏是部分源代碼:結果集繼續給NaN(非A號)

$("#dialogFormSalesOrder").dialog({ 
         autoOpen: false, 
         height: 300, 
         width: 600, 
         modal: true, 
         buttons: { 
          "Pick": function() { 

          //var bValid = true; 
          //allFields.removeClass("ui-state-error"); 

          $(idSalesOrder).val($("#rdbSalesOrder:checked").val()); 


         //window.location.replace("managedelivery.htm"); 
          <% 

           Connection connection = null; 
           String driverName = "com.mysql.jdbc.Driver"; 
           Class.forName(driverName); 
           String serverName = "localhost:3306"; 
           String mydatabase = "versedb"; 
           String url = "jdbc:mysql://" + serverName + "/" + mydatabase; // a JDBC url 

           String username = "root"; 
           String password = ""; 
           connection = DriverManager.getConnection(url, username,password); 

           Statement stmt = connection.createStatement(); 
           ResultSet rs = stmt.executeQuery("Select idProduct, quantity from vrs_tsodetail where idSO='SO101'"); 

           while(rs.next()) 

           {%> 



             $("#warehouse tbody" + "").append(
              "<tr>" + 
              '<td><input id="idProduct" name="idProduct" value="' + <% String s = rs.getString(1).toString(); %> + '" /></td>' + 
              '<td><input id="idQuantity" name="idQuantity" value="' + <% s = rs.getString(2); %> + '" /></td>' + 
              '<td><input id="idUnit" name="idUnit" value="cccccc" /></td>' + "</tr>" 
             ); 

           <%}%> 




          $(this).dialog("close"); 
         }, 
         Cancel: function() { 
          $(this).dialog("close"); 
         } 
        }, 
        close: function() { 
         //allFields.val("").removeClass("ui-state-error"); 

        } 
+0

用root,沒有密碼來訪問您的數據庫.....餿主意。你有沒有現場的例子? –

+0

@AlistairLaing什麼是現場示例?我只是繼續某人的計劃,並且他沒有使用密碼給DB。 –

+0

現場示例是其他人可以訪問以查看您的代碼的示例。你仍然可以以root用戶身份登錄設置密碼,創建另一個用戶比root用戶更少的權限。這會大大增加您的應用程序的安全性。 –

回答

0

下面是相關的,從你的代碼中提取:

$("#warehouse tbody" + "").append(
    "<tr>" + 
    '<td><input id="idProduct" name="idProduct" value="' + <% String s = rs.getString(1).toString(); %> + '" /></td>' + 
    '<td><input id="idQuantity" name="idQuantity" value="' + <% s = rs.getString(2); %> + '" /></td>' + 
    '<td><input id="idUnit" name="idUnit" value="cccccc" /></td>' + "</tr>" 
); 

這裏有2個問題(實際上有more serious problems與此代碼一般,但它們實際上並不影響功能):

  1. 您不打印任何內容到響應中。
  2. 您期待Java和JavaScript同步運行。

爲了解決問題1,你需要使用<%= %>,而不是在<% %>它們分配給一個字符串,然後完全忽略它。

$("#warehouse tbody" + "").append(
    "<tr>" + 
    '<td><input id="idProduct" name="idProduct" value="' + <%= rs.getString(1) %> + '" /></td>' + 
    '<td><input id="idQuantity" name="idQuantity" value="' + <%= rs.getString(2) %> + '" /></td>' + 
    '<td><input id="idUnit" name="idUnit" value="cccccc" /></td>' + "</tr>" 
); 

要解決問題2,需要刪除Java/JSP打印值上的JavaScript字符串連接。您應該將Java/JSP視爲HTML/JS代碼生成器。否則,它們將被視爲現有JavaScript變量的名稱。假設第一列返回"foo"和第2列返回"bar",這隻會在生成的JS代碼最終像這樣(在瀏覽器中右擊頁面,做查看源看到它自己):

$("#warehouse tbody" + "").append(
    "<tr>" + 
    '<td><input id="idProduct" name="idProduct" value="' + foo + '" /></td>' + 
    '<td><input id="idQuantity" name="idQuantity" value="' + bar + '" /></td>' + 
    '<td><input id="idUnit" name="idUnit" value="cccccc" /></td>' + "</tr>" 
); 

但你JS代碼中的任何地方都沒有定義這些變量,對吧?他們是undefined。你需要它內嵌在JS代碼,而不是:

$("#warehouse tbody" + "").append(
    "<tr>" + 
    '<td><input id="idProduct" name="idProduct" value="<%= rs.getString(1) %>" /></td>' + 
    '<td><input id="idQuantity" name="idQuantity" value="<%= rs.getString(2) %>" /></td>' + 
    '<td><input id="idUnit" name="idUnit" value="cccccc" /></td>' + "</tr>" 
); 

這樣,它結束了在有效的JS代碼如下所示:

$("#warehouse tbody" + "").append(
    "<tr>" + 
    '<td><input id="idProduct" name="idProduct" value="foo" /></td>' + 
    '<td><input id="idQuantity" name="idQuantity" value="bar" /></td>' + 
    '<td><input id="idUnit" name="idUnit" value="cccccc" /></td>' + "</tr>" 
); 
+0

太棒了!它的工作..感謝您的建議,並回答。真的很感激它! –

0

<% String s = rs.getString(1).toString(); %>不輸出任何東西。這只是一個腳本 - 讓(codeblock)。

要輸出一些東西到頁面中,你會做

<%= rs.getString(1).toString() %> 

通知等號( 「=」)的標誌。將該塊轉換爲out.print(...)聲明。

在附註上,我希望這只是您在問題中粘貼的測試代碼。在JSP那麼多邏輯(尤其是開放數據庫連接)不漂亮...