【Spring RCP】 RULES规则
Rich Client 约束规则

1.Constraint 定义了一个约束接口,接口中只有1个方法
public boolean test(Object argument); //这个方法指对约束的检测
2.AbstractPropertyConstraint为Constraint 接口的抽象实现类,在原有基础上封装了“propertyName”字段,用于记录一个约束针对的标识
3.PropertyValueConstraint 是对 AbstractPropertyConstraint进一步的封装,实现针对某个额字符串属性,的检测约束
4.Rule 约束规则对象
public class Rules extends ConstraintsAccessor implements Constraint, PropertyConstraintProvider, Validator,InitializingBea
1) Rule 对象定义了一个Hash属性保存所有需要检测对约束规则
private Map propertiesConstraints = new HashMap()
2) 可以通过add方法将约束规则存入Map中,保存时候,将参数封装成PropertyConstraintProvider ,即保存某个propertyName 对应的 约束规则
3) 初始化时候,Rules提供了一个受保护的方法 初始化对象
protected void initRules() {
//初始化
}
创建一个Rule规则时候,可以通过复写initRules()方法,定义一组规则,例如给某个对象定义一组约束规则
new Rules(ImportDTO.class) {
@Override
protected void initRules() {
add("filePath", new Constraint[] { required() });
add("fileType", new Constraint[] { required() });
}
}
5. DelegateRulesSource 对象为一个规则盖里对象
1)添加Rule 规则 ,一下两个方法用于将约束规则保存到属性中
private DefaultRulesSource delegate;
public void addRules(Rules rules) {
delegate.addRules(rules);
}
public void addRules(String contextId, Rules rules) {
delegate.addRules(contextId, rules);
}
其中DefaultRulesSource 中存在一个Map , 通过KEY-VALUE 方式保存约束规则,KEY=ContextId Value=rules. 如果使用不带有contextId的添加方式,contextId将会是默认值DEFAULT_CONTEXT_ID = "default"
2)初始化,DelegateRulesSource初始化时候,额可以通过addRule方法定义一组,即多个规则约束。
protected void doInit() {
addRules(new Rules(Student.class) {
protected void initRules() {
add("code", all(new Constraint[] { maxLength(25)}));
add("name", all(new Constraint[] { maxLength(25)}));
}
});
addRules(new Rules(Teacher.class) {
protected void initRules() {
add("code", all(new Constraint[] { maxLength(25)}));
add("name", all(new Constraint[] { maxLength(25)}));
}
});
}
3) 父类DelegateRulesSource提供getRules方法用于获取制定的rule 规则, 可以通过Class,或者contextId 这个标示从Map中取出制定的Rules约束规则
6. RulesValidator 是一个检测器 ,依赖RuleSource ,
1)可以实现检测某个对象的某个属性是否满足约束规则
2)实现了接口RichValidator 和 Validator接口
public interface RichValidator extends Validator {
//检测某个对象的某个属性
ValidationResults validate(Object object, String property);
}
public interface Validator {
//检测某个对象
ValidationResults validate(Object object);
}
7、在RCP 中有很多控件需要检测,都可以通过ValidatingFormModel实现,接口方法validate用户检测约束规则。例如:AbstractForm 依赖 ValidatingFormModel,这样就可以通过ValidatingFormModel 实现对FormObject中的对象的属性检测
【Spring RCP】 RULES规则的更多相关文章
- 判断密码是否可见/判断登录的状态/判断在form表单中 定义rules规则验证(iview)
一: 判断密码是否可见判断:type="visiblePassword ? 'text' : 'password'" 是否为false 或者 true 密码为输入框或者文本框点击眼 ...
- Spring Boot+Drools规则引擎整合
目的 官方的Drools范例大都是基于纯Java项目或Maven项目,而基于Spring Boot项目的很少. 本文介绍如何在Spring Boot项目上加上Drools规则引擎. POM依赖 POM ...
- 每天进步一点点------Altium Designer Rules规则详解
对于PCB的设计, AD提供了详尽的10种不同的设计规则,这些设计规则则包括导线放置.导线布线方法.元件放置.布线规则.元件移动和信号完整性等规则.根据这些规则, Protel DXP进行自动布局和自 ...
- Yii2 Model的一些常用rules规则,使用Validator验证
1. Yii2里 model在使用load方法加载浏览器的值的时候,会进行rules验证.这时候可以使用场景,让model对不同场景使用不同验证方式 2. 可以用attributeLabels()来指 ...
- YII2 rules 规则验证器
[['code','name'],'trim'], ['code','string','max'=>4], [['code','name','status'], 'required'], ['e ...
- 【yii2】rules规则的默认值
ExampleModel.php /** * {@inheritdoc} */ public function rules() { return [ ['updated_at','default',' ...
- Spring Boot配置文件规则以及使用方法官方文档查找以及Spring项目的官方文档查找方法
比如要使用Spring Boot实现一个功能,最直接的方式是Google,但是往往搜索出来的都比较乱,关键是乱在不同的版本上,比如1.x版本和2.x版本的配置是不一样的.最明显区别是在使用Thymel ...
- yii2.0 rules 规则中场景验证字段
除了app场景以外的其他场景都验证uid字段['uid', 'required','except'=>'app', 'message' => '参数错误'], 只有app场景验证uid字段 ...
- yii2 rules 规则
required : 必须值验证属性 [['字段名'],required,'requiredValue'=>'必填值','message'=>'提示信息']; #说明:CRequiredV ...
随机推荐
- PDO防sql注入原理分析
使用pdo的预处理方式可以避免sql注入. 在php手册中'PDO--预处理语句与存储过程'下的说明: 很多更成熟的数据库都支持预处理语句的概念.什么是预处理语句?可以把它看作是想要运行的 SQL 的 ...
- postgresql是如何处理死连接(转)
在数据库postgresql中,一个客户端到服务器连接实际上是一个tcp socket连接,tcp连接是虚连接,一方非正常退出(如断电),另一方会继续维持这个连接. 举个例子,一个客户端电脑正常连 ...
- IT 外包中的甲方乙方,德国人,美国人,印度人和日本人印象杂谈
开篇介绍 最近经常和朋友聚会,三十而立的年龄自然讨论最多的就是各自的小家庭,如何赚钱,工作,未来的就业发展,职业转型等话题.还有各种跳槽,机会选择,甲方乙方以及外包中的各种趣事,外企与国内私企的发展机 ...
- NOSDK--一键打包的实现(三)
1.3 编译及拷贝资源的脚本介绍 这一节介绍编译及拷贝资源的shell脚本,即: tools: //保存通用的功 ...
- 与或左移右移操作在ARM寄存器配置中的作用
逻辑运算: 与运算&:与0清零 清零用与运算 或运算 |:或1置一 置一用或运算 异或 ^:不同为1 /*****单个寄存器清零置一*************************** ...
- MySQL Cluster 数据分布(分区、分组)
数据分布 1.MySQL Cluster自动分区数据表(也可能使用用户自定义分区),将数据分布到分区中: 2.一个数据表被划分到多个Data Node分区中,数据在分区中被”striped”: 3.主 ...
- ahjesus Axure RP 7.0注册码
ahjesus Axure RP 7.0注册码 用户名:axureuser 序列号:8wFfIX7a8hHq6yAy6T8zCz5R0NBKeVxo9IKu+kgKh79FL6IyPD6lK7G6+t ...
- 打造smali代码库辅助分析
打造smali代码库辅助分析 在分析Android应用程序的时候,我们往往会插入代码重打包apk来辅助我们分析的工作 一个比较取巧的方法就是先用java写好代码以及相关的调用之后, 然后直接扣出代码 ...
- C++代码重构——从C global到C++ template
在学数据结构的时候,我常有这样目标--写出能够最大程度复用的代码(算法正确,封装优秀).我常想--如何能在短时间内达成"算法正确,封装优秀"这样的目标.经过一段时间的摸索,我的结论 ...
- 向Maven的本地库中添加jar文件
有时我们要用的 maven 依赖项在官方repo库中找不到,然而我们从其他渠道获得了依赖项中的所有jar文件,本文记录了如何向本地库添加jar文件. 从复杂到简单,有三种方法: 使用 maven 的仓 ...