Java JSP-验证表单并在同一JSP中显示错误

Java JSP-验证表单并在同一JSP中显示错误,java,jsp,servlets,Java,Jsp,Servlets,我有一个JSP,它可以让用户在我的网站上注册一个帐户。如果用户向JSP中提交了错误或非法的信息,那么我希望返回相同的JSP,并在每个错误填写的表单字段旁边/上方返回相应的错误消息 如果可能的话,突出显示填写错误的表单字段-尽管此功能不是必需的 我已经在下面给出了一个示例来说明我需要什么。我知道该示例必须使用类似javascript的东西,但我不知道所有客户端脚本。我只想用JSP来做这件事。正如我所说,我想在标记所有错误以及如何纠正错误之后,将JSP表单返回给用户 我该怎么做?我只需要一些初步的指

我有一个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");