Java JSP-验证表单并在同一JSP中显示错误
我有一个JSP,它可以让用户在我的网站上注册一个帐户。如果用户向JSP中提交了错误或非法的信息,那么我希望返回相同的JSP,并在每个错误填写的表单字段旁边/上方返回相应的错误消息 如果可能的话,突出显示填写错误的表单字段-尽管此功能不是必需的 我已经在下面给出了一个示例来说明我需要什么。我知道该示例必须使用类似javascript的东西,但我不知道所有客户端脚本。我只想用JSP来做这件事。正如我所说,我想在标记所有错误以及如何纠正错误之后,将JSP表单返回给用户 我该怎么做?我只需要一些初步的指导。我将自己编写代码,稍后在这里发布 谢谢 编辑-我不想要下拉框。我不希望错误输入的字段周围出现红色边框。我只想在相关字段旁边以红色显示错误消息 下面是一些示例代码-Java JSP-验证表单并在同一JSP中显示错误,java,jsp,servlets,Java,Jsp,Servlets,我有一个JSP,它可以让用户在我的网站上注册一个帐户。如果用户向JSP中提交了错误或非法的信息,那么我希望返回相同的JSP,并在每个错误填写的表单字段旁边/上方返回相应的错误消息 如果可能的话,突出显示填写错误的表单字段-尽管此功能不是必需的 我已经在下面给出了一个示例来说明我需要什么。我知道该示例必须使用类似javascript的东西,但我不知道所有客户端脚本。我只想用JSP来做这件事。正如我所说,我想在标记所有错误以及如何纠正错误之后,将JSP表单返回给用户 我该怎么做?我只需要一些初步的指
<%@ page language="java" contentType="blah..." pageEncoding="blah..."%>
<!DOCTYPE html PUBLIC "blah...">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</head>
<body>
<form method="post" action = "/RegServlet">
user name: <input type="text" name="user"><br>
password : <input type="password" name="pwd">
</form>
</body>
</html>
将页面发布到自身,如login.jsp片段:
<div class="error">
<%
String usrName = "" + request.getParameter("username");
String usrPass = "" + request.getParameter("password");
if (isValid(usrName,usrPass){
openUserSession(usrName); //here you open a session and set the user, if the session doesn't have an user redirect to login.jsp
response.sendRedirect("index.jsp"); //user ok redirect to index (or previous page)
} else {
out.print("Invaid user or password");
}
%>
</div>
<form action="login.jsp" method="POST"> <!-- login.jsp post to itself -->
<input type="text" name="username" id="username"/>
<input type="password" name="password" />
<input type="submit" value="login" name="login" />
<input type="submit" value="register" name="register" />
</form>
其中一些是HTML5属性。其他人则不然,使用普通JSP和servlet处理这个用例并不容易。如果您使用像JSF或SpringMVC这样的MVCWeb框架来简化此类需求的开发,那会更好。+1用于使用SpringMVC+Java验证。此外,还需要服务器端验证。只进行客户端验证非常容易。我建议您只使用服务器端验证,这样您就只能在一个位置使用验证代码,而不是两个位置。@LuiggiMendoza-谢谢。很久以前,我只在JSP和servlet中看到有人这样做。也就是说,他只是在显示带有错误消息的同一份注册表。错误输入的字段周围没有下拉列表,也没有红色边框。找不到教程:@White先生那篇文章是2000年的。从那以后,技术已经进步了,所以不需要再使用了……我正试图使用它来完成这项工作,如果你阅读我的第一条评论,它不会太复杂的话,我要说的是,这太复杂了,无法仅使用JSP和Servlet来处理。你可以让它工作,但它需要太多的时间和精力去做,这应该只是为了学习的目的,我甚至会说这是没有必要的。相反,请查看帮助您完成这些任务的框架。JSP+Servlet并不是万能的解决方案,但请注意,其他解决方案是基于JSP和/或Servlet构建的。它给了我很多错误-在这一行中找到了多个注释:-语法错误,插入枚举标识符以完成EnumHeader-令牌捕获上的语法错误,无效的AnnotationName-令牌上的语法错误,错位构造-语法错误,insert}要完成Enumbody很抱歉,左括号太多,它是从我的程序粘贴的,减少了表单向jsp本身发出请求。然后读取请求对象,如果数据有效,用户将被重定向到另一个页面
<div class="error">
<%
String usrName = "" + request.getParameter("username");
String usrPass = "" + request.getParameter("password");
if (isValid(usrName,usrPass){
openUserSession(usrName); //here you open a session and set the user, if the session doesn't have an user redirect to login.jsp
response.sendRedirect("index.jsp"); //user ok redirect to index (or previous page)
} else {
out.print("Invaid user or password");
}
%>
</div>
<form action="login.jsp" method="POST"> <!-- login.jsp post to itself -->
<input type="text" name="username" id="username"/>
<input type="password" name="password" />
<input type="submit" value="login" name="login" />
<input type="submit" value="register" name="register" />
</form>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Ajax Validation</title>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<!-- or download to a directory -->
<!-- <script src="js/jquery-1.9.1.js"></script> -->
<script type="text/javascript">
jQuery(document).ready(function(){
jQuery('#user').change(function() {
var userName = jQuery(this).val();
jQuery.ajax({
type : 'GET',
url : 'AjaxUserCheck',
data : {user:userName},
dataType : 'html',
success : function(data) {
if(jQuery.trim(data)=='1')
{
jQuery("#userLabel").html("Sorry! username is taken");
//write other stuff: border color ...
}
else if(jQuery.trim(data)=='0')
jQuery("#userLabel").html("user name available");
else
alert(data); //possible error
},
error : function(xhr,status,error){
console.log(xhr);
alert(status);
}
});
});
});
</script>
</head>
<body>
<form method="post" action = "/RegServlet">
user name: <input type="text" name="user" id="user">
<label id="userLabel"></label>
<br>
password : <input type="password" name="pwd">
</form>
</body>
</html>
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String user = request.getParameter("user");
//if(dao.isUserExist(user)){
if(user.equals("java")){ // check for db if userid exists in DB print '1' else '0'
out.print("1");
}
else
out.print("0");