使用request.getParameter()/ getAttribute()获取html输入值将返回null

时间:2016-01-18 10:12:05

标签: javascript java jsp

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

我的输入字段是一个表单,检查功能设置为“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()放在最后

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

  4. 依此类推。
    我似乎无法让它发挥作用!
    任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:0)

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

实际上,当用户在客户端输入内容时,您打算调用checkExists。但是这些&lt; %%&gt;中的代码标签已经处理完毕 在服务器端。当页面在浏览器上加载时,你的var res将是&#34;&#34;和警报代码将被执行。

以下是您查看页面来源而非预期时所获得的内容:

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

}

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

执行以下操作:
1.删​​除标记中的代码&lt;%..%&gt;还有&#34; var res&#34;线
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

答案 1 :(得分:0)

问题是您在请求中查找的参数仍然不在该请求中。这是因为你在同一个jsp(客户端)编写你的java代码,所以请求是&#34;前一个&#34;,我的意思是,直到你提交表单,这些参数将无法从客户端访问。 如果你创建一个用输入的onChange事件触发的javascript函数,你可能会解决这个问题。然后你得到值并将其传递给你的函数。

答案 2 :(得分:0)

大家好,谢谢大家回答!!!! 我做了一些类似于一些变化的答案,因为我的项目似乎比最初的建议有更多问题:

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

Eclipse Output Folders

(我没有使用谷歌工具包)

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

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

4.我将视图更改为“navigator”(window-&gt; show view-&gt; navigator)以查看默认输出文件夹并选中我已在类文件夹中编译我的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>

就是这样! 我知道这是一个很长的答案,但它包含了一些我努力的事情,并希望与未来的编码人员分享。

希望这有帮助!