之前用JQuery都是手写表单验证,现在已经熟练使用JQuery表单框架,表单验证变得异常简单,下面给出使用步骤
步骤1:JSP/HTML页面导入JQuery验证框架的JS
insert.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JQuery验证框架</title>
<!-- 导入JQuery验证框架支持 -->
<script type="text/javascript" src="jquery/jquery-1.11.2.min.js"></script>
<script type="text/javascript" src="jquery/jquery.metadata.js"></script>
<script type="text/javascript" src="jquery/additional-methods.min.js"></script>
<script type="text/javascript" src="jquery/jquery.validate.min.js"></script>
<script type="text/javascript" src="js/insert.js"></script>
<script type="text/javascript" src="js/Message_zh_CN.js"></script>
<!-- 导入CSS -->
<link href="css/info.css" rel="stylesheet" type="text/css"/>
<link >
</head>
<body>
<div id="formDiv">
<form action="index.jsp" method="post" id="memberForm">
<table border="1">
<tr>
<td colspan="3">用户注册</td>
</tr>
<tr>
<td>用户名</td>
<td>
<input type="text" name="member.mid" id="member.mid" class="init">
</td>
<td>
<span id="member.midMsg"></span>
</td>
</tr>
<tr>
<td>密码</td>
<td>
<input type="password" name="member.password" id="member.password" class="init">
</td>
<td>
<span id="member.passwordMsg"></span>
</td>
</tr>
<tr>
<td>确认密码</td>
<td>
<input type="password" name="member.confPassword" id="member.confPassword" class="init">
</td>
<td>
<span id="member.confPasswordMsg"></span>
</td>
</tr>
<tr>
<td>年龄</td>
<td>
<input type="text" name="member.age" id="member.age" class="init">
</td>
<td>
<span id="member.ageMsg"></span>
</td>
</tr>
<tr>
<td>邮箱</td>
<td>
<input type="text" name="member.email" id="member.email" class="init">
</td>
<td>
<span id="member.emailMsg"></span>
</td>
</tr>
<tr>
<td>生日</td>
<td>
<input type="text" name="member.birthday" id="member.birthday" class="init">
</td>
<td>
<span id="member.birthdayMsg"></span>
</td>
</tr>
<tr>
<td>性别</td>
<td>
<input type="radio" name="member.sex" id="member.sex" class="init" value="男">男
<input type="radio" name="member.sex" id="member.sex" class="init" value="女">女
</td>
<td>
<span id="member.sexMsg"></span>
</td>
</tr>
<tr>
<td>爱好</td>
<td>
<input type="checkbox" name="member.inst" id="member.inst" class="init" value="唱歌">唱歌
<input type="checkbox" name="member.inst" id="member.inst" class="init" value="跳舞">跳舞
<input type="checkbox" name="member.inst" id="member.inst" class="init" value="跳舞">游泳
</td>
<td>
<span id="member.instMsg"></span>
</td>
</tr>
<tr>
<td>城市</td>
<td>
<select name="member.city" id="member.city" >
<option>====请选择城市=====</option>
<option value="BJ">北京</option>
<option value="SH">上海</option>
<option value="GZ">广州</option>
</select>
</td>
<td>
<span id="member.cityMsg"></span>
</td>
</tr>
<tr>
<td>个人主页</td>
<td>
<input type="text" name="member.homePage" id="member.homePage" class="init">
</td>
<td>
<span id="member.homePageMsg"></span>
</td>
</tr>
<tr>
<td>验证码</td>
<td>
<input type="text" name="code" id="code" class="init" maxlength="4" size="4">
<img src="image.jsp">
</td>
<td>
<span id="codeMsg"></span>
</td>
</tr>
<tr>
<td colspan="3">
<input type="submit" value="注册">
<input type="reset" value="重置">
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
步骤二:导入编写中文资源文件,其实我更建议针对每个表单编写独立的Message
Message_zh_CN.js
$.extend($.validator.messages, {
required: "该字段不允许为空!",
remote: "数据输入错误,请重新输入!",
email: "请输入正确格式的电子邮件!",
url: "请输入合法的网址!",
date: "请输入合法的日期!",
dateISO: "请输入合法的日期(例如yyyy/mm/dd或yyyy-mm-dd)!",
number: "请输入合法的数字(整数或小数)!",
digits: "请输入整型数据!",
creditcard: "请输入合法的信用卡号!",
equalTo: "两次输入的内容不一致!",
accept: "文件后缀不符合要求!",
maxlength: $.validator.format("输入内容长度不能大于{0}!"),
minlength: $.validator.format("输入内容长度不能小于{0}!"),
rangelength: $.validator.format("输入的数据长度应该为{0}-{1}之间"),
range: $.validator.format("请输入一个介于 {0} 和 {1} 之间的值!"),
max: $.validator.format("可以输入的最大值为 {0} !"),
min: $.validator.format("可以输入的最小值为 {0} !")
});
步骤三:编写表单验证JS文件
insert.js
$(function(){
$("#memberForm").validate({ //定义验证规则
debug : true , //采用调试模式,表单不会自动提交
errorPlacement : function(error,element){ //error表示自动生成的错误信息文字,element表示触发的元素(JQuery对象)
//调试专用语句 console.log("#"+element.attr("id")+"Msg");
var objName=element.attr("id")+"Msg" ;
if(objName.indexOf(".") != -1) { //现在名字里包含.
objName=objName.replace(".","\\.") ; //修改对象名字
}
$("#"+objName).append(error) ;
} ,
highlight :function(element,errorClass) { //高亮显示,element:DOM对象
$(element).attr("class","wrong") ;
} ,
unhighlight : function(element,errorClass){
$(element).attr("class","right") ;
} ,
// errorClass : "wrong" , //错误样式
// validClass : "right" , //正确样式
rules :{ //为每一个表单编写验证规则
"member.mid" :{
required : true , //此字段不允许为空
rangelength: [3,15] ,
remote : {
url : "mid.jsp" ,
type : "post" ,
dataType : "text" ,
data : { //要发送的数据
"member.mid" : function(){
return $("#member\\.mid").val() ;
}
} ,
dataFilter :function(data,type){ //处理完成执行的函数
var flag=false ;
if(data.trim()=="true"){
flag=true ;
}
return flag ;
}
}
},
"member.age" :{
required : true ,
digits : true ,
range : [0,300]
} ,
"member.email" : {
required : true ,
email : true
} ,
"member.birthday" : {
required : true ,
dateISO : true
},
"member.sex":{
required : true
} ,
"member.inst" :{
required: true
} ,
"member.city":{
required : true
},
"member.homePage" :{
required: true ,
url : true
},
"member.password" :{
required: true
} ,
"member.confPassword" :{
required: true ,
equalTo : "#member\\.password" //注意,两次验证,这里稍微有点区别!
},
"code":{
required : true ,
maxlength : 4 ,
remote :{
url: "code.jsp" ,
type : "post" ,
dataType : "text" ,
data : {
"code" : function (){
return $("#code").val() ;
}
},
dataFilter : function (data,type){
var flag=false ;
if(data.trim()=="true"){
flag=true ;
}
return flag ;
}
}
}
}
});
}) ;
验证码相关代码
image.jsp
<%-- 郑州大学软件学院(www.ZZU.edu.cn) --%>
<%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" pageEncoding="GBK"%>
<%!
Color getRandColor(int fc,int bc){//给定范围获得随机颜色
Random random = new Random();
if(fc>255) fc=255;
if(bc>255) bc=255;
int r=fc+random.nextInt(bc-fc);
int g=fc+random.nextInt(bc-fc);
int b=fc+random.nextInt(bc-fc);
return new Color(r,g,b);
}
%>
<%
//设置页面不缓存
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
// 在内存中创建图象
// 通过这里可以修改图片大小
int width=80, height=25;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 获取图形上下文
// g相当于笔
Graphics g = image.getGraphics();
//生成随机类
Random random = new Random();
// 设定背景色
g.setColor(getRandColor(200,250));
// 画一个实心的长方,作为北京
g.fillRect(0, 0, width, height);
//设定字体
g.setFont(new Font("宋体",Font.PLAIN,18));
//画边框
//g.setColor(new Color());
//g.drawRect(0,0,width-1,height-1);
// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160,200));
for (int i=0;i<155;i++)
{
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x,y,x+xl,y+yl);
}
// 取随机产生的认证码(4位数字)
//String rand = request.getParameter("rand");
//rand = rand.substring(0,rand.indexOf("."));
String sRand="";
// 如果要使用中文,必须定义字库,可以使用数组进行定义
// 这里直接写中文会出乱码,必须将中文转换为unicode编码
String[] str = {"A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","m","n","p","s","t","u","v","w","x","y","z","1","2","3","4","5","6","7","8","9"} ;
for (int i=0;i<4;i++){
String rand=str[random.nextInt(str.length)];
sRand+=rand;
// 将认证码显示到图象中
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
g.drawString(rand,16*i+6,19);
}
// 将认证码存入SESSION
session.setAttribute("rand",sRand);
// 图象生效
g.dispose();
// 输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());
out.clear();
out = pageContext.pushBody();
%>
code.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%=session.getAttribute("rand").toString().equalsIgnoreCase(request.getParameter("code"))%>
**1.具体的验证需要再详细设计,下次用的时候直接贴代码就行了;
2.其实不建议使用资源文件Message_zh_CN.js,虽然会冗余,但是更好控制错误信息的显示;
3.对于下拉列表,提示信息我真不知道怎么处理,后期会好好研究一下;
4.结合Bootstrap做的表单验证会非常炫酷;**