validator类(表单异步验证js库:async-validator)

本文目录
- 表单异步验证js库:async-validator
- 如何使用Validator框架
- validator.js remote 返回什么类型
- JAVA中有个org.springframework.validation.Validator是什么意思
- 如何使用java validation api进行参数校验
表单异步验证js库:async-validator
***隐藏网址***
基本用法包括定义一个descriptor,将其分配给schema,并将要验证的对象和回调函数传递给schema创建出来的validator的validate方法:
该方法将返回Promise对象,如:
传递给validate或asyncvalidate的选项将传递给验证函数,以便您可以在验证函数中临时引用数据(例如模型引用)。但是,某些选项名是保留的;如果使用选项对象的这些属性,它们将被覆盖。保留的属性是消息、异常和错误。
针对单个字段测试多个验证规则通常很有用,这样可以使规则成为对象数组,例如:
要使用的验证程序的类型,识别的类型值如下:
boolean,是否必填
模式规则属性表示正则表达式,该值必须匹配才能通过验证。
使用min和max属性定义范围。对于字符串和数组类型,将根据长度进行比较,对于数字类型,数字不得小于min,也不得大于max。
验证字段的确切长度。对于字符串和数组类型,对length属性执行比较,对于数字类型,此属性指示数字的完全匹配,即,它可能仅严格等于len。如果len属性与最小和最大范围属性组合,则len优先。
枚举,要从可能值列表中验证值,请使用带有枚举属性的枚举类型,列出该字段的有效值。
空白,通常将仅包含空格的必填字段视为错误。要为仅包含空格的字符串添加其他测试,请将空白属性添加到值为true的规则。规则必须是字符串类型。
如果需要验证深层对象属性,则可以通过将嵌套规则分配给规则的fields属性来为对象或数组类型的验证规则执行此操作。
深度规则验证为嵌套规则创建架构,因此还可以指定传递给schema.validate()方法的选项。
父规则也会被验证,因此如果您有一组规则,例如:
并提供 {roles: } 这样的源对象,将会创建两个错误。一个用于数组长度不匹配,另一个用于索引2处缺少的必需数组项。
defaultField属性可与数组或对象类型一起使用,以验证容器的所有值。它可以是包含验证规则的对象或数组。例如:
有时需要在验证之前转换值,可能是为了强制价值或以某种方式对其进行消毒。为此,请将验证规则添加到转换有时需要在验证之前转换一个值,可能是强制值或以某种方式对其进行清理。为此,请向验证规则添加转换函数。该属性在验证之前被转换,并重新分配给源对象,以在适当的位置改变该属性的值。
如果没有转换函数,验证将失败,因为模式不匹配,因为输入包含前导空格和尾随空格,但通过添加转换函数验证传递,同时清理字段值。
消息,根据您的应用程序要求,您可能需要i18n支持,或者您可能更喜欢不同的验证错误消息。实现这一点的最简单方法是将消息分配给规则:
消息可以是任何类型,例如jsx格式。
消息也可以是一个函数,例如,如果使用vue-i18n:
对于不同的语言,可能需要相同的模式验证规则,在这种情况下,为每种语言复制模式规则是没有意义的。在这个场景中,您只需为该语言提供您自己的消息并将其分配给模式:
如果要定义自己的验证函数,最好将消息字符串分配给消息对象,然后通过验证函数内的options.messages属性访问消息。
异步验证器,您可以为指定字段自定义异步验证函数:function(rule, value, callback)
验证器,您可以为指定字段自定义验证函数:function(rule, value, callback)
如何使用Validator框架
Validator框架是一个独立的Validation Framework,目前在Struts1.1中可以一起打包下载。作为Apache Commom的一个OpenSource,它可以和Struts一起结合使用,也可以和其他非Web应用中使用。前段时间利用Eclipse3.02 + MyEclipse3.8.4结合Xdoclet开发了一个EJB + Struts的Web应用,发现采用这些工具开发效率还是比较高的。MyEclipse通过xdoclet生成CMP ejb的时候会自动创建对应的Value Object类,结合struts框架时,可以把这Value Object结合Struts中的Form采用Composite模式,采用委托的方式来实现ActionForm。这些在Eclipse IDE中实现非常快速。但也存在一些问题,当JSP页面中的FORM中的数据通过Struts中的Form进入到对应的Value Object之前需要进行数据合法性校验,而这种校验在一个企业级Web应用中会存在大量的重复冗余代码,造成大量的重复工作和维护的工作量。
Validator是一个独立于表现和业务逻辑的一个FrameWork,它通过预定义一组校验规则以及提供了一套简单的扩展机制,让程序员可以自由的定义自己复杂的校验规则。规则与规则可以是相互依赖的,也可以是独立的。
下面使用一个登录的例子简单谈谈如何让Validator框架与Struts框架进行整合,从而把数据校验独立出来,使得大部分的校验规则得到重用,并且使得校验方法可配置化和易于维护。
1、准备配置文件
这里要用到两个xml文件,validator-rules.xml和validation.xml,前者用于定义校验器,在validator框架中已经预定义了十几个常用的校验器的实现;后者用于定义和Struts框架中具体的Form相关联的各个字段的校验,这两个文件放置在/WEB-INF/目录下面。
2、准备Struts的Form和Action
定义一个Form,这个Form从ValidatorFrom继承而来(缺省从ActionForm继承),具体的代码如下:
//Created by MyEclipse Struts
// XSL source (default): platform:/plugin/com.genuitec.eclipse.cross.easystruts.eclipse_3.8.4/xslt/JavaClass.xsl
package com.test.struts.form;
***隐藏网址***
import org.apache.struts.action.ActionMapping;
import org.apache.struts.validator.ValidatorForm;
/**
* MyEclipse Struts
* Creation date: 06-19-2005
*
* XDoclet definition:
* @struts:form name="logonForm"
*/
public class LogonForm extends ValidatorForm {
private String memberID;
private String password;
/**
* Method reset
* @param mapping
* @param request
*/
public void reset(ActionMapping mapping, HttpServletRequest request) {
memberID = null;
password = null;
}
/**
* @return Returns the memberID.
*/
public String getMemberID() {
return memberID;
}
/**
* @param memberID The memberID to set.
*/
public void setMemberID(String memberID) {
this.memberID = memberID;
}
/**
* @return Returns the password.
*/
public String getPassword() {
return password;
}
/**
* @param password The password to set.
*/
public void setPassword(String password) {
this.password = password;
}
}
定义一个Action,具体的代码如下所示:
//Created by MyEclipse Struts
// XSL source (default): platform:/plugin/com.genuitec.eclipse.cross.easystruts.eclipse_3.8.4/xslt/JavaClass.xsl
package com.test.struts.action;
***隐藏网址***
***隐藏网址***
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.test.struts.form.LogonForm;
/**
* MyEclipse Struts
* Creation date: 06-19-2005
*
* XDoclet definition:
* @struts:action path="/logon" name="logonForm" input="/jsp/logon.jsp" scope="request" validate="true"
*/
public class LogonAction extends Action {
/**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
LogonForm logonForm = (LogonForm) form;
return mapping.findForward("success");
}
}
FormBean和Action在struts-config.xml中的配置如下所示:
《form-beans 》
《form-bean name="logonForm" type="com.test.struts.form.LogonForm" /》 《/form-beans》
《action-mappings 》
《action
attribute="logonForm"
input="/jsp/logon.jsp"
name="logonForm"
path="/logon"
scope="request"
validate="true"
type="com.test.struts.action.LogonAction"》
《forward name="success" path="/jsp/success.jsp"/》
《/action》
《/action-mappings》
注意:在《action》元素中的validate属性必需设置为true。
3、配置validator-rules.xml和validation.xml文件
validator-rules.xml用于配置校验器,这个文件基本上可以重用。validation.xml用于配置与具体的Form Bean有关的校验配置。
validator-rules.xml
《form-validation》
《global》
《validator name="required"
classname="org.apache.struts.validator.FieldChecks"
method="validateRequired"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
***隐藏网址***
msg="errors.required"》
......
《/global》
《/form-validation》
Validation.xml
《form-validation》
《!-- ========== Default Language Form Definitions ===================== --》
《formset》
《form name="logonForm"》
《field property="memberID"
depends="required,short, minlength,maxlength"》
《arg0 key="prompt.memberID"/》
《arg1 key="${var:minlength}" name="minlength"
resource="false"/》
《arg2 key="${var:maxlength}" name="maxlength"
resource="false"/》
《var》
《var-name》maxlength《/var-name》
《var-value》16《/var-value》
《/var》
《var》
《var-name》minlength《/var-name》
《var-value》3《/var-value》
《/var》
《/field》
《field property="password"
depends="required, minlength,maxlength"》
《arg0 key="prompt.password"/》
《arg1 key="${var:minlength}" name="minlength"
resource="false"/》
《arg2 key="${var:maxlength}" name="maxlength"
resource="false"/》
《var》
《var-name》maxlength《/var-name》
《var-value》16《/var-value》
《/var》
《var》
《var-name》minlength《/var-name》
《var-value》3《/var-value》
《/var》
《/field》
《/form》
《/formset》
《/form-validation》
4、定义资源文件ApplicationResources.properties
首先,资源文件必须要在struts-config.xml文件中进行定义:
《message-resources parameter="com.test.struts.ApplicationResources" /》
下面是资源文件中的内容,它主要关联到:
validator-rules.xml文件中《validator》元素中的msg属性;
validation.xml中field元素中作为参数传递给validator框架的arg0 -- arg3。
# Resources for parameter ’com.test.struts.ApplicationResources’
# Project P/ValidatorWeb
errors.header=《span class="error-header1"》Errors:《/span》《br》《span class="error-header2"》You must correct the following error(s) before processing.《/span》《ul》
errors.footer=《/ul》
errors.prefix=《li》《span class="error-text"》
errors.suffix=《/span》《/li》
prompt.memberID=Member ID
prompt.password=Password
prompt.test=test
# Standard error messages for validator framework checks
errors.required={0} is required.
errors.minlength={0} cannot be less than {1} characters.
errors.maxlength={0} cannot be greater than {2} characters.
errors.invalid={0} is invalid.
errors.byte={0} must be an byte.
errors.short={0} must be an short.
errors.integer={0} must be an integer.
errors.long={0} must be an long.
errors.float={0} must be an float.
errors.double={0} must be an double.
errors.date={0} is not a date.
errors.range={0} is not in the range {1} through {2}.
errors.creditcard={0} is not a valid credit card number.
errors.email={0} is an invalid e-mail address.
5、在struts-config.xml中配置validator
必须在struts-config.xml中以plugin的方式指定validator的配置资源,这样,web应用在能够根据这些配置把各种校验器等资源加载到内存中。
《plug-in className="org.apache.struts.validator.ValidatorPlugIn"》
《set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" /》
《/plug-in》
6、在相关的JSP文件中通过Struts框架中的html标签制订相应的属性值
《html:javascript dynamicJavascript="true"
formName="logonForm"
staticJavascript="false"/》
这个标签用于在具体的jsp生成的客户端html页面中生成一段对应的javascript代码。
《html:form action="/logon" focus="memberID"
onsubmit="return validateLogonForm(this);"》
《/html:form》
用于当用户点击《html:form》中的submit按钮时,会执行相应的检查,如果检查没有通过,则不回去调用Action中的execute方法。
validator.js remote 返回什么类型
validator.js remote 返回类型是根据表单比较的结果一般是返回字符串类型。
有时候不仅仅对表单所录入的信息进行验证还需要将录入的值与数据库进行比较,这时就需要借助remote方法来实现。以下介绍 jquery.validate.js的后台验证的remote方法,准备工作,前台页面:
《script src="test/jquery.js" type="text/javascript"》《/script》
《script src="test/jquery.validate.js" type="text/javascript"》《/script》
《script src="test/jquery.validate.message_cn.js" type="text/javascript"》《/script》
《/head》
《body》
《form name="test" id="testform" method="get" action="get.php"》
《fieldset》
《legend title="用户注册(User Register)"》用户注册(User Login)《/legend》
《p》
《label for="name"》用户名:《/label》
《input id="name" name="name" type="text" /》
《/p》
《p》
《label for="mail"》邮箱:《/label》
《input id="mail" name="mail" type="password" /》
《/p》
《p》
《label for="password"》密码:《/label》
《input id="password" name="password" type="password" /》
《/p》
《p》
《label for="repassword"》重复密码:《/label》
《input id="repassword" name="repassword" type="password" /》
《/p》
《p》
《label for="hash"》邀请码:《/label》
《input id="hash" name="hash" type="text" /》
《/p》
《p》
《label for="sel"》选择:《/label》
《select id="sel" name="sel"》
《option value=""》请选择《/option》
《option value="1"》选择1《/option》
《option value="2"》选择2《/option》
《option value="3"》选择3《/option》
《option value="4"》选择4《/option》
《/select》
《/p》
《p》
《label for="type"》用户类型:《/label》
《span》《input name="type" type="radio" value="1" /》类型1《/span》
《span》《input name="type" type="radio" value="2" /》类型2《/span》
《span》《input name="type" type="radio" value="3" /》类型3《/span》
《/p》
《p》
《label for="submit"》 《/label》
《input class="submit" type="submit" value="注册"/》
《/p》
《/fieldset》
《/form》
要实现的效果:
验证代码:
《script type="text/javascript"》
$(function(){
$("#testform").validate({
rules : {
name : {
required : true
},
password: {
required: true,
minlength: 5
},
repassword: {
required: true,
minlength: 5,
equalTo: "#password"
},
hash: {
required: true,
remote: ’checkhash.php’
},
sel: {
remote: ’checksel.php’
},
type: {
remote:{
url: "changeusertype.php",
type: "get",
dataType: ’json’,
data: {
’type’: function(){return $(’input:checked’).val();}
}
}
}
},
messages : {
name : {
required : ’必填’
},
password: {
required: ’必填’,
minlength: ’最少5个字符’
},
repassword: {
required: ’必填’,
minlength: ’最少5个字符’,
equalTo: ’两次输入的密码不一样’
},
hash: {
required: ’必填’,
remote: ’邀请码不正确’
},
sel: {
remote: ’选择不正确’
},
type: {
remote: ’类型不可更改’
}
},
focusInvalid: true,
/*指定错误信息位置*/
errorPlacement: function (error, element) {
error.appendTo(element.closest("p"));
},
//设置错误信息存放标签
errorElement: "em",
submitHandler: function(form) {
}
});
})
《/script》
验证结果如下:
JAVA中有个org.springframework.validation.Validator是什么意思
一个验证功能
使用spring提供的org.springframework.validation.Validator的时候,在注册的验证器的时候注意写明这个验证器是是为哪个对象提供验证的,否则默认为所有@ModelAttribute提供验证,如果不支持(supports方法)就会报错误(类似org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalStateException: Invalid target for Validator : com.smvc.annonation.utils.ResultFilter@c378f6),但是并不会对没有标注为@Valid的@ModelAttribute进行真正的验证。
view plaincopyprint?
@InitBinder("student")
public void initBinder(WebDataBinder binder) {
//添加一个日期类型器,也就是需要日期类型的时候,怎么把字符串转化为日期类型
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
//添加一个spring自带的validator
binder.setValidator(new StudentValidator());
}
@InitBinder("student")
public void initBinder(WebDataBinder binder) {
//添加一个日期类型器,也就是需要日期类型的时候,怎么把字符串转化为日期类型
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
//添加一个spring自带的validator
binder.setValidator(new StudentValidator());
}
如果没有标注@Valid就不会进行任何验证
如何使用java validation api进行参数校验
JAVA中通过Hibernate-Validation进行参数验证
在开发JAVA服务器端代码时,我们会遇到对外部传来的参数合法性进行验证,而hibernate-validator提供了一些常用的参数校验注解,我们可以拿来使用。
1.maven中引入hibernate-validator对应的jar:
《dependency》
《groupId》org.hibernate《/groupId》
《artifactId》hibernate-validator《/artifactId》
《version》4.3.1.Final《/version》
《/dependency》
2.在Model中定义要校验的字段(即该字段不能为空,并且最大长度为14):
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.NotEmpty;
public class PayRequestDto {
/**
* 支付完成时间
**/
@NotEmpty(message="支付完成时间不能空")
@Size(max=14,message="支付完成时间长度不能超过{max}位")
private String payTime;
public String getPayTime() {
return payTime;
}
public void setPayTime(String payTime) {
this.payTime = payTime;
}
}
3.定义Validation工具类:
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import org.hibernate.validator.HibernateValidator;
import com.atai.framework.lang.AppException;
public class ValidationUtils {
/**
* 使用hibernate的注解来进行验证
*
*/
private static Validator validator = Validation
.byProvider(HibernateValidator.class).configure().failFast(true).buildValidatorFactory().getValidator();
/**
* 功能描述: 《br》
* 〈注解验证参数〉
*
* @param obj
* @see (可选)
* @since (可选)
*/
public static 《T》 void validate(T obj) {
Set《ConstraintViolation《T》》 constraintViolations = validator.validate(obj);
// 抛出检验异常
if (constraintViolations.size() 》 0) {
throw new AppException("0001", String.format("参数校验失败:%s", constraintViolations.iterator().next().getMessage()));
}
}
}
4.在代码中调用工具类进行参数校验:
ValidationUtils.validate(requestDto);
以下是对hibernate-validator中部分注解进行描述:
@AssertTrue 用于boolean字段,该字段只能为true
@AssertFalse 该字段的值只能为false
@CreditCardNumber 对信用卡号进行一个大致的验证
@DecimalMax 只能小于或等于该值
@DecimalMin 只能大于或等于该值
@Digits(integer=,fraction=) 检查是否是一种数字的整数、分数,小数位数的数字
@Email 检查是否是一个有效的email地址
@Future 检查该字段的日期是否是属于将来的日期
@Length(min=,max=) 检查所属的字段的长度是否在min和max之间,只能用于字符串
@Max 该字段的值只能小于或等于该值
@Min 该字段的值只能大于或等于该值
@NotNull 不能为null
@NotBlank 不能为空,检查时会将空格忽略
@NotEmpty 不能为空,这里的空是指空字符串
@Null 检查该字段为空
@Past 检查该字段的日期是在过去
@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内
@Size(min=, max=) 检查该字段的size是否在min和max之间,可以是字符串、数组、集合、Map等
@URL(protocol=,host,port) 检查是否是一个有效的URL,如果提供了protocol,host等,则该URL还需满足提供的条件
@Valid 该注解主要用于字段为一个包含其他对象的集合或map或数组的字段,或该字段直接为一个其他对象的引用,这样在检查当前对象的同时也会检查该字段所引用的对象

更多文章:
网关是什么怎么设置(网关到底是什么,不同的网络如何正确设置网关)
2026年10月11日 08:30
亚洲和欧洲的分界线简图(画出亚欧,亚非,南北美,亚洲北美洲和南美南极的分界线和名称.图片)
2026年10月11日 05:50
虚拟空间免root大全(gameguardian修改器免root安卓APK下载地址)
2026年10月11日 00:10






