【问题标题】:Getting html input value with request.getParameter() / getAttribute() returns null使用 request.getParameter() / getAttribute() 获取 html 输入值返回 null
【发布时间】:2016-01-18 10:12:04
【问题描述】:

我正在编写一个 Web 项目,我需要将信息传入和传出我的 mySQL 数据库。我有有效的java代码(即显示来自数据库的数据,没有问题)和应该处理信息的javascript。 我有一个表单(姓名、姓氏等),我需要检查数据库中是否已经存在姓名、姓氏。
我的问题是将用户写入 java 方法的 <input> 字段中的文本传递给。

我的输入字段在一个表单中,检查功能设置为“oninput”,因此它检查每个按键。输入字段:

First name: <input class="inName" type="text" id="FirstName" name="FirstName" oninput="checkExist()"/><span id="info1" class="info"></span><br>
        Last name: <input class="inLName" type="text" id="LastName" name="LastName" oninput="checkExist()"/><span id="info2" class="info"></span><br>

检查功能:

function checkExist(){


    <%
    MyConnection myCon = MyConnection.getConnection();
    String fName = (String)request.getParameter("FirstName");
    String lName = (String)request.getParameter("LastName");

    String result = myCon.userExist(fName, lName);

    %>

    var res = "<%=result%>"

    alert(res);
}   

警报表明 java 函数工作正常。 一切都很好,除了 request.getParameter() 返回 null 而不是输入文本。

我试过了:

  1. getAttribute

  2. 将 .toString() 放在末尾​​p>

  3. getElementByid() 并尝试将其传递给函数(不起作用)

等等等等。
我似乎无法让它工作!
任何帮助将不胜感激!

【问题讨论】:

  • 我想知道如何将 script-let 代码写入在客户端调用和运行的 javascript 函数中。

标签: javascript java jsp


【解决方案1】:

问题是您在请求中查找的那些参数尚未包含在该请求中。这是因为您在同一个 jsp(客户端)中编写您的 java 代码,所以请求是“前一个”,我的意思是,在您提交表单之前,这些参数将无法从客户端访问。 如果您创建一个 javascript 函数,该函数在输入的 onChange 事件发生时触发,您可能能够解决这个问题。然后你得到这个值并将它传递给你的函数。

【讨论】:

    【解决方案2】:

    为什么你会得到空值:
    当在服务器端生成主页 html 代码时,没有具有这些名称的请求参数,因此您得到 null。您提到的代码在服务器端生成主页 html 时检查参数(这些 标记内的代码)。根据您的要求,这些参数在此处应为空。并且这些参数应该在一个单独的请求中检查,而不是在这个请求中。

    实际上,当用户在客户端输入内容时,您打算调用 checkExists。但是这些 标记中的代码将已经被处理 在服务器端。当页面在浏览器上加载时,您的 var res 将为 "" 并且警报代码将被执行。

    以下是您在查看页面源代码时将得到的结果,而不是您想要的:

    function checkExist(){
    var res = ""
    alert(res);
    

    }

    解决方案:
    您需要创建另一个 http api 说 /checkNameExists 并从客户端使用 ajax 函数调用此 http api 并传递所需的表单参数,然后相应地处理响应。

    执行以下操作:
    1. 删除标签 中的代码以及 "var res" 行
    2.创建http api请求checkFirstNameExists,它带有一个参数firstName
    3.创建另一个http api checkLastNameExists(为了简单起见,创建另一个或根据需要进行更改),它采用参数lastName。
    4. 代替 checkExists,创建 checkFirstNameExists 和 checkLastNameExists 并适当调用输入框
    5、checkFirstNameExists内部使用ajax(可能是使用jQuery。Example)调用http api checkFirstNameExists http api并根据需要处理输出。
    6. 同样适用于 checkLastNameExists

    【讨论】:

      【解决方案3】:

      您好,谢谢大家的回答!!!! 我做了一些与提供的答案类似的事情,但做了一些更改,因为我的项目中的问题似乎比最初建议的要多:

      1.我创建了一个新的动态网络项目(第一个是静态的),如下所示:

      Eclipse Output Folders

      (我没有使用 google 工具包)

      2.我将旧项目的所有内容复制到新的动态项目中(webcontent 到 war ,java 资源到 java 资源等)并将 jdbc 的 jar 添加到 java 和 WEB-INF lib 文件夹和在 java 构建路径库中添加了 jar。(起初我在 WEB-INF 中没有 lib 文件夹,但我创建了一个并在那里添加了 jar - 非常重要,否则 - 没有 jdbc 连接)

      3.我将java构建路径默认输出文件夹设置为project/war/WEB-INF/classes

      4.我将视图更改为“导航器”(窗口->显示视图->导航器)以查看默认输出文件夹并检查我的 java 类已编译到类文件夹中

      至于代码- 我现在有一个名为“MyConnection”的 java 类,它打开 jdbc 连接并具有从数据库发送和接收数据的方法。

      我有一个 checkUser.jsp,它从 ajax 接收变量并将它们发送到 MyConnection 方法:

      <%@ page import="java.sql.*"%>
      <%@ page import="javafiles.MyConnection"%>
      
      
      <%
      
      String fName = (String)request.getParameter("fname");
      String lName = (String)request.getParameter("lname");
      
      String result = MyConnection.userExist(fName, lName);
      response.getWriter().flush();
      response.getWriter().write(result);
      
      %>
      

      我有一个 ajax 函数,它从输入字段中获取变量并将它们发送给 checkUser:

      <script>
      function checkExist(){
      
          $.ajax({
                type: "POST",
                url: "checkUser.jsp",
                data: {'fname':$("#FirstName").val(),'lname':$("#LastName").val()},
                success: function(data){
                    console.log(data);
                   var exist=data[0];
      
      
      
                      //Query the jQuery object for the values
      
                  if(exist>0){
                      alert("user already exists!")
                  }
                },
                dataType: "text"
              });
      
      }
      
      </script>
      

      从输入的onchange属性调用函数:

      First name: <input class="inName" type="text" id="FirstName" name="FirstName" onchange="checkExist()"/><span id="info1" class="info"></span><br>
      

      就是这样! 我知道这是一个很长的答案,但它包含了一些我一直在努力解决的问题,并希望与未来的程序员们分享。

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-23
        • 1970-01-01
        • 2010-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多