使用来自java类的String设置输入值

时间:2016-10-21 21:15:29

标签: javascript java html jsp hsqldb

我有一个输入字段,用户在其中输入ID。现在我想要的是,产品名称将显示在旧版本旁边的单独输入字段中。

<input type="text" name="productName" id="productName" disabled>

我的JavaScript测试:

<script type="text/javascript">

function setProductName() {

<%
int a = Integer.valueOf(request.getParameter("pName"));
String test = Projektarbeit.getProductName(a);

    document.getElementById('productName').value = <%=test%>;
}

</script>

最后但并非最不重要的是我的方法,它获取了产品名称,这个方法是在一个单独的Java类中!

public static String getProductName(int ID) {
    String x = "";

    try {
        stmt = DBTools.getConnection().createStatement();

        rs = stmt.executeQuery("SELECT NAME FROM PRODUCT WHERE ID = ' " + ID + "';");

        while (rs.next()) {
            x = rs.getString("Name");
        }

        rs.close();
        stmt.close();

    } catch (SQLException e) {
        System.err.println("Error: " + e);
    }

    return x;
}

1 个答案:

答案 0 :(得分:0)

这可能无法解决您的所有问题,但是由于未正确打开和关闭scriptlet标记,您尝试将JSP scriptlet中的值打印到Javascript中失败了。此外,您需要在test变量的打印周围包含引号,因为它是一个字符串(否则您最终会在生成的Javascript中出现语法错误):

<script type="text/javascript">
function setProductName() 
{
   <%
   int a = Integer.valueOf(request.getParameter("pName"));
   String test = Projektarbeit.getProductName(a);
   %>
  document.getElementById('productName').value = "<%=test%>";
}
</script>

当然,实际上,您需要了解有关此方法的更多信息。当您调用Javascript函数setProductName()时,它不会重新执行此JSP代码。此JSP代码将在页面调用时执行一次,然后在该页面的Javascript中打印test的硬编码值。对Javascript函数setProductName()的每次后续调用仅将元素的值设置为硬编码的test值(直到页面刷新获取不同的值)。如果希望每次调用setProductName()执行服务器端代码并​​检索新值,则需要学习Ajax。但由于这是基于request.getParameter("pName")的数值,这可能不是一个问题。