日期验证

来源:互联网 发布:php跳转到指定html页面 编辑:程序博客网 时间:2024/05/18 02:15

 日期验证。

这个例子的HTML很简单(见代码清单4-1)。其中有一个标准的输入框,相应的onchange()事件(当然,可以使用你认为合适的任何事件)会触发验证方法。可以看到,要调用标准createXMLHttpRequest()方法,然后把输入值发送到ValidationServlet servletcallback()函数从服务器得到结果,然后委托给setMessage()方法,这个方法会检查值以确定用什么颜色显示消息。

代码清单4-1  validation.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >

 

<html>

  <head>

    <title>Using Ajax for validation</title>

 

    <script type="text/javascript">

        var xmlHttp;

 

        function createXMLHttpRequest() {

            if (window.ActiveXObject) {

                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

            }

            else if (window.XMLHttpRequest) {

                xmlHttp = new XMLHttpRequest();

            }

        }

 

        function validate() {

            createXMLHttpRequest();

            var date = document.getElementById("birthDate");

            var url = "ValidationServlet?birthDate=" + escape(date.value);

            xmlHttp.open("GET", url, true);

            xmlHttp.onreadystatechange = callback;

            xmlHttp.send(null);

        }

 

        function callback() {

            if (xmlHttp.readyState == 4) {

                if (xmlHttp.status == 200) {

                    var mes =

                        xmlHttp.responseXML

                           .getElementsByTagName("message")[0].firstChild.data;

                    var val =

                       xmlHttp.responseXML

                               .getElementsByTagName("passed")[0].firstChild.data;

                    setMessage(mes, val);

                }

            }

        }

        function setMessage(message, isValid) {

            var messageArea = document.getElementById("dateMessage");

            var fontColor = "red";

            if (isValid == "true") {

                fontColor = "green";

            }

            messageArea.innerHTML = "<font color=" + fontColor + ">"

                + message + " </font>";

        }

 

    </script>

  </head>

  <body>

    <h1>Ajax Validation Example</h1>

    Birth date: <input type="text" size="10" id="birthDate" onchange="validate();"/>

    <div id="dateMessage"></div>

  </body>

</html>

服务器端代码也很简单(见代码清单4-2)。为简单起见,这里把验证代码放在servlet中,而在生产环境中很可能会把验证代码委托给验证服务。

代码清单4-2  ValidationServlet.java

package ajaxbook.chap4;

 

import java.io.*;

import java.text.ParseException;

import java.text.SimpleDateFormat;

 

import javax.servlet.*;

import javax.servlet.http.*;

 

public class ValidationServlet extends HttpServlet {

 

    /** Handles the HTTP <code>GET</code> method.

     * @param request servlet request

     * @param response servlet response

     */

    protected void doGet(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

        PrintWriter out = response.getWriter();

 

        boolean passed = validateDate(request.getParameter("birthDate"));

        response.setContentType("text/xml");

        response.setHeader("Cache-Control", "no-cache");

        String message = "You have entered an invalid date.";

        if (passed) {

            message = "You have entered a valid date.";

        }

        out.println("<response>");

        out.println("<passed>" + Boolean.toString(passed) + "</passed>");

        out.println("<message>" + message + "</message>");

        out.println("</response>");

        out.close();

    }

 

   /**

    * Checks to see whether the argument is a valid date.

    * A null date is considered invalid. This method

    * used the default data formatter and lenient

    * parsing.

    *

    * @param date a String representing the date to check

    * @return message a String representing the outcome of the check

    */

   private boolean validateDate(String date) {

 

        boolean isValid = true;

        if(date != null) {

            SimpleDateFormat formatter= new SimpleDateFormat("MM/dd/yyyy");

            try {

                formatter.parse(date);

            } catch (ParseException pe) {

                System.out.println(pe.toString());

                isValid = false;

            }

        } else {

            isValid = false;

        }

        return isValid;

    }

}

运行这个例子会得到图4-1和图4-2所示的结果。

4-1  输入非法的日期

4-2  输入合法的日期

原创粉丝点击