我正在编写一个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而不是输入文本。
我试过了:
的getAttribute
将.toString()放在最后
getElementByid()并尝试将其传递给函数(不起作用)
依此类推。
我似乎无法让它发挥作用!
任何帮助将不胜感激!
答案 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项目(第一个是静态的),如下所示:
(我没有使用谷歌工具包)
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>
就是这样! 我知道这是一个很长的答案,但它包含了一些我努力的事情,并希望与未来的编码人员分享。
希望这有帮助!