概述

本文介绍Validate自定义表单校验方式。Validate插件虽然提供了丰富的验证规则,但在很多时候仍然很难满足我们的开发需求,在注册页面我们需要通过ajax验证用户输入的用户名是否已经被他人注册,那此时通过传统的Validate验证方式已经无法满足需求了! 我们可以通过自定义验证方法来结合ajax实现这个需求。

自定义ajax基本语法

因为validate是JQuery的插件,所以在此之前必须先导入JQuery和validate的JS包。

<script type="text/javascript">
    //下面开始自定义一个校验规则(addMethod方法传入两个参数,第一个是自定义校验规则的规则名称,第二个传入的是校验方法)
    $.validator.addMethod(
"规则名称",
function(value,element,params){
    //这个是验证所调用函数(校验函数),传入三个参数
    //value:输入的内容(表单元素输入的内容,如果此时username表单元素绑定了该校验规则,那么value就是在触发此校验规则时,用户输入的用户名)
    //element:被校验的元素对象
    //params:规则对应的参数值(例:在required:true 传入的params就是true)
}
    );
</script>

在这里需要明确的是

  • addMethod()方法中需要传入两个参数,第一个参数为自定义校验规则的规则名称,第二个为校验时所调用的方法(校验函数)。
  • 在传入的校验函数中有三个形参(具体作用前面已经指出)
  • 校验函数需要返回布尔值,如果返回为true,则不会显示绑定的提示信息。如果为false,就会显示绑定的信息(“用户名已存在”)

用户名的查重需求的具体实现

  • 前端页面实现
     
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <title>会员注册</title>
    </head>
    <script src="js/jquery-1.11.3.min.js" type="text/javascript"></script>
    <!-- 引入表单校验jquery插件 -->
    <script src="js/jquery.validate.min.js" type="text/javascript"></script>
    <style>
    .error{
    color:red
    }
    </style>
    <script type="text/javascript">
    //自定义校验规则
    $.validator.addMethod(
    //规则的名称
    "checkUsername",
    //校验的函数
    function(value,element,params){
    //定义一个标志
    var flag = false;
    //此时使用ajax后台校验用户名是否正确
    $.ajax({
    "async":false,
    "url":"${pageContext.request.contextPath}/checkUsername",
    "data":{"username":value},
    "type":"POST",
    "dataType":"json",
    //这里的data是服务器传来的一个json字符串,前端解析为JS对象(里面包含是否存在该用户的信息)
    "success":function(data){
    //data.isExist==false代表服务器不存在该用户
    flag = data.isExist;
    }
    });
    //返回false代表该校验器不通过
    return !flag;
    }
    ); $(function(){
    $("#myform").validate({
    rules:{
    "username":{
    "required":true,
    "checkUsername":true
    }
    },
    messages:{
    "username":{
    "required":"用户名不能为空",
    "checkUsername":"用户名已存在"
    }
    }
    );
    });
    </script>
    <body>
    <form id="myform" class="form-horizontal" action="省略" method="post" >
    用户名<input type="text" class="form-control" id="username" name="username" placeholder="请输入用户名">
    </form>
    </body>
    </html>
  • 后端页面实现
  • package com.web.servlet;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse; import com.service.UserService; public class CheckUsernameServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("UTF-8");
    String username=request.getParameter("username");
    UserService service=new UserService();
    //isExist代表用户名是否存在,true代表存在,false代表不存在
    boolean isExist=service.checkUserisExist(username);
    //封装json数据
    String json="{\"isExist\":"+isExist+"}";
    response.getWriter().write(json);
    } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    doGet(request, response);
    } }

在这里我们需要明确

  • ajax如何收服务器传来的数据的,在上面的ajax中定义了一个回调函数("success":function(data){...})。这个回调函数中有一个有一data参数,它代表服务器传递过来的数据,可能是js对象,也可能是个文本...。但在前面已经设置data是json("dataType":"json"),所以这里的data已经被解析为一个js对象了。所以我们可以通过data.isExist得到对象中的数据。
  • 服务器端如何传输JSON数据的,服务器端通过response.getWriter().wirte(json);即可传输数据。在服务器端的json字符串传到客户端后会自动解析为js对象。

下面是博主的其他文章,喜欢的博友们点个关注,谢谢您的支持。

Java8 Lambda表达式入门

JDK8之前,匿名内部类访问的局部变量为什么必须要用final修饰

EL表达式与JSTL简单入门

JSON转换工具的使用

                           

Validate插件的自定义验证方法入门(结合Ajax实现用户名的数据库查重)的更多相关文章

  1. jquery.validate remote 和 自定义验证方法

    jquery.validate remote 和 自定义验证方法 $(function(){ var validator = $("#enterRegForm").validate ...

  2. jquery validate.addMethod 正则表达式 (自定义验证方法)

    项目中使用的jQuery添加的校验的方法 $(document).ready(function(){         5           6/* 设置默认属性 */         7$.vali ...

  3. validate插件深入学习-04自定义验证方法

    自定义验证方法 jQuery.validator.addMethod(name,method,[,message]) name: 方法名 method: function(value,element, ...

  4. jqery validate、validate自定义验证方法 + jaery form Demo

    校验规则 required:true  必输字段 remote:"check.php"  使用ajax方法调用check.php验证输入值 email:true  必须输入正确格式 ...

  5. jQuery.validator.addMethod自定义验证方法

    在开发中用到了jQuery的validate控件,有时需要自定义验证方法.我们可以通过jQuery.validator.addMethod()来实现,下面是例子: <!DOCTYPE html ...

  6. Spring Security验证流程剖析及自定义验证方法

    Spring Security的本质 Spring Security本质上是一连串的Filter, 然后又以一个独立的Filter的形式插入到Filter Chain里,其名为FilterChainP ...

  7. spring boot集成mybatis-plus插件进行自定义sql方法开发时报nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

    spring boot集成mybatis-plus插件进行自定义sql方法开发时报nested exception is org.apache.ibatis.binding.BindingExcept ...

  8. jquery validate 自定义验证方法

    query validate有很多验证规则,但是更多的时候,需要根据特定的情况进行自定义验证规则. 这里就来聊一聊jquery validate的自定义验证. jquery validate有一个方法 ...

  9. jquery.validate使用 - 自定义验证方法

    自定义jquery-validate的验证行为 1: 自定义表单提交 设置submitHandler来自定义表单提交动作 $(".selector").validate({    ...

  10. jquery validate 自定义验证方法 日期验证

    jquery validate有很多验证规则,但是更多的时候,需要根据特定的情况进行自定义验证规则. 这里就来聊一聊jquery validate的自定义验证. jquery validate有一个方 ...

随机推荐

  1. sqli_lab Less1练习笔记

    首先观察页面信息,看有没有提示. 很显然,这个页面让我们传入id这个参数(根据题目的分支,应该是get方法) 使用HackBar进行传入参数,首先传入id=1 http://localhost/sql ...

  2. mask2former出来的灰度图转切割轮廓后的二值图

    切割后的灰度图 转成二值图代码如下 点击查看代码 # This is a sample Python script. import cv2 import numpy as np # Press Shi ...

  3. Graph Embedding-DeepWalk

    一言以蔽之,DeepWalk是在graph上,通过随机游走来产生一段定长的结点序列,并将其通过word2vec的方式获得各个结点的embedding的算法. DeepWalk一共涉及以下几个内容: 随 ...

  4. CentOS 5.5编译安装vsftpd-2.3.4配置虚拟用户

    CentOS 5.5编译安装vsftpd-2.3.4配置虚拟用户 2012-02-22 17:18:15|  分类: rhel_vsftp|举报|字号 订阅 centos 5.5编译安装vsftpd- ...

  5. python 虚拟环境篇

    前言 这个倒是非常之重要. 首先我们知道python通过pip安装,那么我们安装的所有东西都会在我们pip下的配置目录下,这会显得非常臃肿,同样也让我们部署艰难. python虚拟环境,他是这样做的, ...

  6. 重新整理数据结构与算法(c#系列)—— 树的前中后序遍历查找[十七]

    前言 树的前中后序遍历 是根据前中后序的顺序来查找,找到了则弹出. 正文 节点模型: public class HeroNode { private int no; private string na ...

  7. Pytorch DistributedDataParallel(DDP)教程二:快速入门实践篇

    一.简要回顾DDP 在上一篇文章中,简单介绍了Pytorch分布式训练的一些基础原理和基本概念.简要回顾如下: 1,DDP采用Ring-All-Reduce架构,其核心思想为:所有的GPU设备安排在一 ...

  8. 笔记本电脑上的聊天机器人: 在英特尔 Meteor Lake 上运行 Phi-2

    对应于其强大的能力,大语言模型 (LLM) 需要强大的算力支撑,而个人计算机上很难满足这一需求.因此,我们别无选择,只能将它们部署至由本地或云端托管的性能强大的定制 AI 服务器上. 为何需要将 LL ...

  9. DataWorks开发ODPS SQL开发生产环境自动补全ProjectName

    简介: DataWorks标准模式下,支持开发环境和生产环境隔离,开发环境和生产环境的数据库表命名有所区别,如果需要在开发环境访问生产环境的数据库表或者跨项目空间访问其他项目空间的表,需要根据proj ...

  10. OpenYurt 深度解读|开启边缘设备的云原生管理能力

    ​简介: 北京时间 9 月 27 号,OpenYurt 发布 v0.5.0 版本.新发布版本中首次提出 kubernetes-native非侵入.可扩展的边缘设备管理标准,使 Kubernetes 业 ...