一:前台校验
jquery提供了自己的一套自己的校验规则,使用方便,
引入jquery.js和jquery.validate.js文件即可
1、使用jquery的validate组件
$("form.validate-form").validate( {
onkeyup : false,
onclick : false,
onsubmit : true,
onfocusout : function(element) {$(element).valid();}
});
$("form.validate-form")是获取表单元素
分别在失去焦点和表单提交时进行校验
2、自定义校验规则
$.validator.addMethod("hasChineseChar",function(value,element){
var reg = /[\u4e00-\u9fa5]+/;
return !reg.test(value);
},"含有中文字符");
$("form.validate-form").validate( {
rules:{
username:"hasChineseChar"
}
}
3、动态添加校验规则
rules("add",rules)
var $arr = $("[class*='unique-pk-']");
$arr.each(function(i) {
var classname = $(this).attr("class");
var clsarr = classname.split(" ");
clsarr = $.grep(clsarr, function(ele, i) {
return ele.indexOf("unique-pk-", 0) >= 0;
});
if (clsarr.length > 0) {
var result = clsarr[0].replace("unique-pk-", "");
var params = result.split("-");
$(this).rules("add", {
remote:{
type:"POST",
url:"ajax_unique.action",//后台返回true或 false
data:{
entityClassName:params[0],
fieldName:params[1],
fieldValue:function(){return $arr[i].value;}
}
}
});
}
});
//覆盖原有的错误信息
var message_zh = {
remote:$.validator.format("{0}已注册")
};
$.extend($.validator.messages,message_zh);
二:后台校验
struts2也提供了自己的校验器,在后台可以对参数校验
1、前台jsp中,需要使用struts2提供的标签
<s:form action="validate_add.action" method="post" theme="simple" validate="true">
<table>
<tr>
<td>用户名</td>
<td><s:textfield name="username"/><s:fielderror fieldName="username" cssClass="tip"/></td>
</tr>
<tr><td colspan="2"><s:submit value="提交"></s:submit></td></tr>
</table>
</s:form>
<s:fielderror />标签可以显示指定元素的错误消息
在struts2的配置文件中必须有input的result
<result name="input">/input.jsp</result>
2、通过手写方法使用校验器
1)对所有请求校验,重写action类中的validate()方法即可
该action类中的所有请求处理方法都会执行该方法
public void validate(){
if("admin".equals(username))
addFieldError("username", "用户名错误");
}
2)对指定请求校验,重写validateXxx()方法即可
如新增请求,在action类由add方法,则添加validateAdd()方法
3、通过xml配置方法使用校验器
使用这种方法需要在jsp页面的表单form添加validate="true"属性才会生效
1)对所有请求校验
如有一个ValidateAction类,则在该类所在的包里添加ValidateAction-validate.xml文件
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.2//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
<field name="username">
<field-validator type="requiredstring">
<message key="requiredstring"/>
</field-validator>
</field>
</validators>
2)对指定请求校验,如现在有一validate_add请求,处理action为VadaliteAction类
则在该类所在的包里添加ValidateAction-validate_add-validate.xml
内容同上
3)自定义校验规则
struts2提供了自己已经定义好的校验规则,如requiredstring,int,url等
如果想用自己定义的校验,
首先要新建一java类,继承FieldValidatorSupport,重写validate方法
public void validate(Object obj) throws ValidationException {
String fieldname = getFieldName();
Object val = getFieldValue(fieldname, obj);
if(!"admin".equals(val.toString())
addFieldError(fieldname, obj);
}
在src目录下新建validators.xml文件,将新建的类添加进去
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator Config 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
<validators>
<validator name="myValidate" class="com.validators.MyValidator"/>
</validators>
校验器会先查找根目录下的validators.xml文件
然后再找com.opensymphony.xwork2.validator.validators包下的default.xml文件
如果当前请求action有父类,
则依次查找并加载ParentAction-validate.xml,ParentAction-xxx-validate.xml,
ChildAction-validate.xml,ChildAction-xxx-validate.xml文件
如果其中有冲突,则以后加载的为准