【问题标题】:request.getPArameter() returning null [duplicate]request.getParameter() 返回 null [重复]
【发布时间】:2014-03-14 14:19:05
【问题描述】:

我试图在用户单击按钮后立即读取用户的输入。但不幸的是,request.getParamater() 总是返回一个null 值。有人可以帮我吗我已经几个小时试图解决这个问题:(

<%@ page import="java.io.*,java.util.*,java.sql.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>

<html> 
<head>

    <script language="javascript">



        function add()
        {
        <%
    Integer quantity = 500;
    Integer code = 1000;

    //String codes = request.getParameter("code");
    String codes = (String) request.getParameter("code");
    String quanti = (String) request.getParameter("quantity");

    if (codes != null && quanti != null) {
        quantity = Integer.parseInt(quanti);
        code = Integer.parseInt(codes);
    }

    out.println(code);
    out.println(quantity);

    String connectionURL = "jdbc:mysql://localhost:3306/products";

    Connection connection = null;

    PreparedStatement pstatement = null;

    Class.forName("com.mysql.jdbc.Driver").newInstance();
    int updateQuery = 0;

    // check if the text box is empty
    if (code != null && quantity != null) {
        // check if the text box having only blank spaces
        if (codes != "" && quanti != "") {
            try {
                /* Create a connection by using getConnection()
                 method that takes parameters of string type 
                 connection url, user name and password to connect 
                 to database. */
                connection = DriverManager.getConnection(connectionURL, "root", "170293m");
                // sql query to insert values in the secified table.
                String queryString = "INSERT INTO sales (code, quantity, price, name) VALUES (?, ?, ?, ?)";
                /* createStatement() is used for create statement
                 object that is used for 
                 sending sql statements to the specified database. */
                pstatement = connection.prepareStatement(queryString);
                pstatement.setInt(1, code);
                pstatement.setInt(2, quantity);
                pstatement.setDouble(3, 50);
                pstatement.setString(4, "aw ras");
                updateQuery = pstatement.executeUpdate();
                if (updateQuery != 0) {
                    out.println("Error in query");
                }
            } catch (Exception ex) {
                out.println("Unable to connect to batabase.");

            } finally {
                // close all the connections.
                pstatement.close();
                connection.close();
        }
        }
    }%>
            print();
        }

        function remove()
        {

        }
    </script>
    <title>BestWholesaler LTd.</title>
</head> 
<body>
    <h1>Welcome to BestWholesaler Ltd. Online Ordering</h1>
    <h2>Items Currently in Stock</h2>

    <sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"
                       url="jdbc:mysql://localhost:3306/products"
                       user="root"  password="170293m"/>

    <sql:query dataSource="${snapshot}" var="result">
        SELECT Name, Code, PricePU, Quantity from productinfo;
    </sql:query>

    <table border="1" width="100%">
        <tr>
        <th>Name</th>
        <th>Code</th>
        <th>Price/Unit</th>
        <th>Quantity Available</th>
    </tr>
    <c:forEach var="row" items="${result.rows}">
        <tr>
        <td><c:out value="${row.Name}"/></td>
        <td><c:out value="${row.Code}"/></td>
        <td><c:out value="${row.PricePU}"/></td>
        <td><c:out value="${row.Quantity}"/></td>
    </tr>
</c:forEach>
</table>

<br>
<br>
Enter Code:     <input type="text" name="code" id="code" value="" />
<br>
Enter Quantity: <input type="text" name="quantity" id="quantity" value="" />
<input type="button" value="ADD" name="add" onclick="add()" />
<input type="button" value="REMOVE" name="remove" onclick="remove()" />

</body>

</html>

【问题讨论】:

  • request.getParameter() 将请求参数的值作为字符串返回,如果参数不存在,则返回 null。你在哪里指定了codequantity
  • 它们在正文的最后部分指定,即输入代码: 等...

标签: java html jsp parameters null


【解决方案1】:

您没有使用任何&lt;form&gt; HTML 标签。所有input标签都必须进去,按钮点击应该做一个submit的表单。

顺便说一句,您正在以一种无法正常工作的方式混合 Javascrit 客户端代码和 Java 服务器代码,您有不同的呈现时间。

在此示例中,假设您希望在客户端和服务器端都拥有一个独特的组件,正如您所做的那样,您可以将以下内容添加到您的 JSP 中。对于商品,我将分离客户端和服务器端逻辑。

客户端

<script>
  function flagLoaded(){
     document.forms[0]["loaded"].value = "true";
  }
</script>

<form name="input" action="myself.jsp" method="get" onsubmit="flagLoaded()">
  <!-- put here all your client-side's inputs -->

  <!-- ... TODO ... -->

  <input type="hidden" name="loaded" value="false">
    <input type="submit" value="Submit">
</form>

服务器端

<%
  if("true".equals(request.getParameter("loaded"))){
      //TODO
      /*
         Do here server-side logic...
      */
  }
%>

【讨论】:

  • 我对 jsp 很陌生...你能告诉我应该在哪里填写表格吗?它应该是 post 类型还是 get 类型?谢谢
  • 请问我该怎么办?
  • 我添加了表单标签并将按钮更改为 sublit...我现在该怎么办?
  • 我添加了一些代码。如果它对您没有任何意义,您还应该学习 HTML 和 Javascript,除了 JSP :)
【解决方案2】:

这背后的主要原因是您正在使用javascript,即&lt;script language="javascript"&gt;,并且您正试图在其中运行服务器端代码。 您必须使用 &lt;/script&gt; 关闭 javascript,然后尝试运行服务器端代码..

【讨论】:

    【解决方案3】:

    这里不需要 javascript,使用基本的 html 表单标签来提交详细信息。也不要使用 scriplets,因为您已经知道 jstl。注意以下代码仅用于添加,您需要编写代码用于删除。

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
    
        <sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/products" user="root" password="170293m" />
        <title>BestWholesaler LTd.</title>
        <style>
          .error {
            color: red;
          }
        </style>
    
        <body>
          <h1>Welcome to BestWholesaler Ltd. Online Ordering</h1>
          <h2>Items Currently in Stock</h2>
    
          <!-- add button was clicked -->
          <c:if test="${null != param.add}">
            <c:catch var="error">
              <sql:update dataSource="${snapshot}" scope="page" var="result">
                INSERT INTO sales (code, quantity, price, name) VALUES (?, ?, ?, ?)
                <sql:param value="${param.code}" />
                <sql:param value="${param.quantity}" />
                <sql:param value="50" />
                <sql:param value="aw ras" />
              </sql:update>
            </c:catch>
          </c:if>
    
          <!-- error occured -->
          <c:if test="${null != error}">
            <div class='error'>
              Failed to save stock details
            </div>
          </c:if>
    
          <c:catch var="error">
            <sql:query dataSource="${snapshot}" var="result">
              SELECT Name, Code, PricePU, Quantity from productinfo;
            </sql:query>
          </c:catch>
    
          <c:if test="${null != error}">
            <div class='error'>
              Failed to get stock details
            </div>
          </c:if>
    
          <c:if test="${null == error}">
            <table border="1" width="100%">
              <tr>
                <th>Name</th>
                <th>Code</th>
                <th>Price/Unit</th>
                <th>Quantity Available</th>
              </tr>
              <c:forEach var="row" items="${result.rows}">
                <tr>
                  <td>
                    <c:out value="${row.Name}" />
                  </td>
                  <td>
                    <c:out value="${row.Code}" />
                  </td>
                  <td>
                    <c:out value="${row.PricePU}" />
                  </td>
                  <td>
                    <c:out value="${row.Quantity}" />
                  </td>
                </tr>
              </c:forEach>
            </table>
          </c:if>
    
          <br/>
          <br/>
          <form method='post'> <!-- no action required, still you can give the same jsp file name -->
            Enter Code:
            <input type="text" name="code" />
            <br/>Enter Quantity:
            <input type="text" name="quantity" />
            <input type="submit" value="ADD" name="add" />
          </form>
        </body>

    【讨论】:

      猜你喜欢
      • 2021-01-27
      • 1970-01-01
      • 2014-09-21
      • 2021-12-10
      • 2015-10-10
      • 2018-11-13
      • 2012-05-04
      • 2013-01-18
      • 1970-01-01
      相关资源
      最近更新 更多