Jodd-vtor验证框架
VTor是一个编程式验证框架,适用于任意java对象的验证。它是一个快速、微型的、专注于验证的框架。也可以通过注解或者手动设置验证条件。验证条件也可以在profile中分组。VTor是可扩展的,用户很容易使用自定义的验证条件。默认情况下,验证条件以java编写,但也很容易扩展它,使用xml或者其它编程语言来定义验证表达式。
Validation in action
VTor的验证过程包括:
定义校验检查(如应用的验证条件)。
在目标对象(通常指java bean对象)执行这些规则。
检查验证结果。
示例:
ValidationContext vctx = new ValidationContext();
vctx.add(new Check("boo", new MinLengthConstraint(2)));
上面的代码片段在VTOR验证上下文中定义了一个简单check,这个check定义了boo属性的最小长度。
现在,验证一些bean试试:
Vtor vtor = new Vtor();
vtor.validate(vctx, fooBeanInstance);
验证已经执行。唯一要做的事情是检查验证结果:
List<Violation> vlist = vtor.getViolations();
当验证成功后,返回list是null。反正list包含了一组验证失败的冲突。非常简单,是吧?
Default constraints
VTor包含了很多通用的验证条件,如:
MaxConstraint,MinConstraint,RangeConstraint--定义了最大、最小范围的数字值。
LengthConstraint,HasSubstringConstraint,LengthConstraint,WildcardMatchConstraint....---检查string的值。
EqualToFieldConstraint --检查两个field是否相等。
..............
想要查看完整的验证条件请查看VTor的javadoc。
VTor annotations
当需要多行验证时,VTor支持使用注解来简化使用。下面使用注解来重写上面的示例:
public class Foo {
@MinLength(2)
String boo; // getters/setters are optional
}
现在验证可以使用很少几行来完成:
Vtor vtor = new Vtor();
vtor.validate(fooInstance);
System.out.println(vtor.hasViolations());
就是如此简单。
Profiles
当一个bean不能使用不同set的验证条件例如rule组进行验证时,使用注解的问题就爆发了。
例如:例如一个用户模型对象,在创建和更新用户时的验证不同:创建时需要检查username是否唯一。这个时候就用到VTor的profile。
Profile是一组验证条件的组合名称。VTor注解也可以指明Profile组别.
@MinLength(value = 2, profiles = {"p1,p2"})
String boo;
编程形式如下:
Vtor vtor = new Vtor();
vtor.useProfiles("p1", "p2");
vtor.validate(fooInstance);
特殊的profile名称:
*(通配符,代表所有的)--用在注释中,意思是一些验证条件属于所有的profile。因此为了不用写出所有的profile名称,可以使用这个通配符来替代。
default --作用在默认组的校验check,例如没有显式定义profile名称的注解。
Excluding profiles
有时,需要从一个或者多个profile中排除一个check(由注解验证条件定义的)。不用写下除了要排除掉的所有的profile名称,使用一个减号('-')作为前缀来排除一个profile,如(-p2).
注意:排除profile名具有更高的优先级。
因而,即便一些check属于一个严重级别的profile,若存在一个排除profile,check将不会执行。
Must-have profiles
若存在至少一个匹配的profile,check将会执行。有时,我们需要在所有的profile都有的check才执行,为达成这个目的,只要将加好("+")置于profile名称前面即可。
Severity
级别时一个简单的检验权值,低于该指定级别的所有check将不会执行。
Profiles summary
// match profiles 'p1' OR 'p2'
@FooCheck(profiles = {"p1", "p2"}) // match profiles 'default' OR 'p2'
@FooCheck(profiles = {"default", "p2"}) // match 'p1' OR 'p3' ONLY IF 'p2' does NOT match
@FooCheck(profiles = {"p1", "-p2", "p3"}) // match profiles 'p1' AND 'p2'
@FooCheck(profiles = {"+p1", "+p2"})
Misc
增加自定义的violation。
VTor允许用户增加自定义的violation,而不仅仅是检验条件。例如:
vtor.addViolation(new Violation("number", foo, null));
这种形式下,甚至是验证本身都可以在VTor之外执行,然后传递结果到框架中。
Use constraints directly
绝大部分的VTor验证条件可以直接执行,使用验证类的静态方法validate().示例如下:
boolean valid = MinLengthConstraint.validate("value", 3);
结束!yeah!
Jodd-vtor验证框架的更多相关文章
- jQuery Validate验证框架详解
转自:http://www.cnblogs.com/linjiqin/p/3431835.html jQuery校验官网地址:http://bassistance.de/jquery-plugins/ ...
- strus2验证框架
为什么要用验证框架? 当验证规划比较复杂时,Action类的代码江边的非常繁琐,假如我们要对电话号码进行验证,是非常麻烦的. 验证框架的优点 Struts2中内置了一个验证框架,将常用的验证规则进行了 ...
- 【积累】validate验证框架的使用
validate验证框架的使用:用验证框架可以很方便的验证前端页面输入的内容可以自定义验证方法 内容:0:环境搭建 1:基础用法 2:自定义用法 0:基本环境的搭建 0.1:下载js文件 0.2:引入 ...
- Struts2验证框架实例
今天写了个Struts验证框架的实例,总算把验证框架弄清楚了. 上一篇Struts实例的action没有继承ActionSupport类,虽然也可以实现action的功能,但是却不能应用Struts提 ...
- struts2 的验证框架validation如何返回json数据 以方便ajax交互
struts2 的验证框架validation简单,好用,但是input只能输出到jsp页面通过struts2的标签<s:fielderror />才能取出,(EL应该也可以). 如果使 ...
- 【转】jquery validate验证框架与kindeditor使用需二次提交的问题
原文:http://blog.csdn.net/wlsyn/article/details/11536399在使用jquery的验证框架对kindeditor富文本编辑器进行验证的过程中,发现提 交时 ...
- ValidationSugar表单验证框架-支持ASP.NET MVC ASP.NET WebFroM
ValidationSugar表单验证框架的优点: 1.支持javascript端和后端的双重验证 (前端目前依赖于jquery.validate.js,也可以自已扩展) 2.代码简洁 3.调用方便 ...
- Struts2(十二)使用验证框架验证数据较验
一.数据验证 1.1.为什么要进行数据验证 对数据的合法性进行检查,只允许合法的数据进入应用程序 1.2.在哪里实现数据验证 客户端验证: 数据提交前在客户端验证 可使用JavaScript或者JQu ...
- Silverlight实例教程 - 自定义扩展Validation类,验证框架的总结和建议(转载)
Silverlight 4 Validation验证实例系列 Silverlight实例教程 - Validation数据验证开篇 Silverlight实例教程 - Validation数据验证基础 ...
随机推荐
- Trie树的常见应用大总结(面试+附代码实现)
(一)Trie的简单介绍 Trie树,又称字典树,单词查找树或者前缀树.是一种用于高速检索的多叉树结构,如英文字母的字典树是一个26叉树.数字的字典树是一个10叉树. 他的核心思想是空间换时间,空间消 ...
- cocos2d-x 2.2.0 怎样在lua中注冊回调函数给C++
cocos2d-x内部使用tolua进行lua绑定.可是引擎并没有提供一个通用的接口让我们能够把一个lua函数注冊给C++层面的回调事件. 翻看引擎的lua绑定代码,我们能够仿照引擎中的方法来做. 值 ...
- ORA-01555错误总结(二)
这篇文章紧接着上一篇"ORA-01555错误总结(一)".主要描写叙述延迟块清除导致的ORA-01555错误. 以下是一些简介(上一遍已经介绍过) ORA-01555错误是一种在o ...
- 特定位取反(js实现)
去华为面试的时候.没有做好准备工作.面试的流程没有问清也没有查,结果一过去就让上机做题,着实有点措手不及.笔者是擅长前端的Java Webproject师啊,主要的底层编程知识早已生疏了.机试题碰到了 ...
- 10.MongoDB:将Json数据直接写入MongoDB的方法
Json转Bson MongoDB中是以Bson数据格式进行存储的,Json字符串没有办法直接写入MongoDB 可以将Json字符串转换成DBObject或者Document,然后写入MongoDB ...
- JS--处理重复元素
1.Js找出在数组中出现过的元素,即删除重复元素最后只留一个 <script> function findEleOnly(arr){ for(var i=arr.length-1;i> ...
- Ubuntu16.04添加HP Laserjet Pro M128fn打印机和驱动
一.全部设置->打印机->添加新打印机 添加打印机 二.选择自动搜索到的网络打印机HP Laserjet Pro M128fn,点击添加. 三.添加打印机完成,打印测试页进行测试. 四. ...
- Bootstrap Table 的用法
记录下 Bootstrap Table 的用法,备忘. <!DOCTYPE html> <html> <head> <meta charset="u ...
- Android学习笔记(三)
ContentProvider简单介绍 ContentProvider是不同应用程序之间进行数据交换的标准API,当一个应用程序须要把自己的数据暴露给其它程序使用时.该应用程序便可通过提供Conten ...
- POJ 1325 && ZOJ 1364--Machine Schedule【二分图 && 最小点覆盖数】
Machine Schedule Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 13071 Accepted: 5575 ...