2011-10-12 84 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那么多逻辑(尤其是开放数据库连接)不漂亮...