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规则的更多相关文章

  1. 判断密码是否可见/判断登录的状态/判断在form表单中 定义rules规则验证(iview)

    一: 判断密码是否可见判断:type="visiblePassword ? 'text' : 'password'" 是否为false 或者 true 密码为输入框或者文本框点击眼 ...

  2. Spring Boot+Drools规则引擎整合

    目的 官方的Drools范例大都是基于纯Java项目或Maven项目,而基于Spring Boot项目的很少. 本文介绍如何在Spring Boot项目上加上Drools规则引擎. POM依赖 POM ...

  3. 每天进步一点点------Altium Designer Rules规则详解

    对于PCB的设计, AD提供了详尽的10种不同的设计规则,这些设计规则则包括导线放置.导线布线方法.元件放置.布线规则.元件移动和信号完整性等规则.根据这些规则, Protel DXP进行自动布局和自 ...

  4. Yii2 Model的一些常用rules规则,使用Validator验证

    1. Yii2里 model在使用load方法加载浏览器的值的时候,会进行rules验证.这时候可以使用场景,让model对不同场景使用不同验证方式 2. 可以用attributeLabels()来指 ...

  5. YII2 rules 规则验证器

    [['code','name'],'trim'], ['code','string','max'=>4], [['code','name','status'], 'required'], ['e ...

  6. 【yii2】rules规则的默认值

    ExampleModel.php /** * {@inheritdoc} */ public function rules() { return [ ['updated_at','default',' ...

  7. Spring Boot配置文件规则以及使用方法官方文档查找以及Spring项目的官方文档查找方法

    比如要使用Spring Boot实现一个功能,最直接的方式是Google,但是往往搜索出来的都比较乱,关键是乱在不同的版本上,比如1.x版本和2.x版本的配置是不一样的.最明显区别是在使用Thymel ...

  8. yii2.0 rules 规则中场景验证字段

    除了app场景以外的其他场景都验证uid字段['uid', 'required','except'=>'app', 'message' => '参数错误'], 只有app场景验证uid字段 ...

  9. yii2 rules 规则

    required : 必须值验证属性 [['字段名'],required,'requiredValue'=>'必填值','message'=>'提示信息']; #说明:CRequiredV ...

随机推荐

  1. MyBatis学习总结(一)——MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  2. SQL Server附加数据库时报1813错误的解决方案

    SQL Server附加数据库时报1813错误的解决方案   无法打开新数据库 'ASR'.CREATE DATABASE 中止. 文件激活失败.物理文件名称'E:\SqlServer\MSSQL\D ...

  3. MySql 杂记

    1:声明一个int变量时,设置它默认为0,而不是空或null. int 型,取值范围-2,147,483,648 到 2,147,483,647 ,默认值是 0 int是值类型,读内存区间中指定长度单 ...

  4. cf723d Lakes in Berland

    The map of Berland is a rectangle of the size n × m, which consists of cells of size 1 × 1. Each cel ...

  5. [Network] 计算机网络基础知识总结

    计算机网络学习的核心内容就是网络协议的学习.网络协议是为计算机网络中进行数据交换而建立的规则.标准或者说是约定的集合.因为不同用户的数据终端可能采取的字符集是不同的,两者需要进行通信,必须要在一定的标 ...

  6. Linux C 字符函数 getchar()、putchar() 与 EOF 详解

    首先给出<The_C_Programming_Language>这本书中的例子: #include <stdio.h> int main() { int c; c = getc ...

  7. 超全的web开发工具和资源

    首页 新闻 产品 地图 动态 城市 帮助 论坛 关于 登录 注册 · 不忘初心,继续前进,环境云V2接口正式上线 · 环境云测点地图全新改版 · 祝福各位环境云用户中秋快乐!   平台信息 培训互动 ...

  8. 4. K线基础知识

    1. K线基础知识 K线又叫阴阳线.蜡烛图.最早由日本米市商人发明,后来推广应用到金融行情价格的分析. K线图的构造主要包含四个价格因素:开盘价.收盘价.最高价.最低价 2. K线图例 收盘价高于开盘 ...

  9. 核心动画 - CAKeyframeAnimation 简单应用

    核心动画: 登录按钮的抖动效果: CAKeyframeAnimation * kfAnimation = [CAKeyframeAnimation animationWithKeyPath:@&quo ...

  10. Spring预处理

    当需要在某些Spring项目一启动,就执行某些操作时,需要实现改接口ApplicationListener,重写onApplicationEvent方法,将需要的预处理操作全部写在该方法中 当初始化完 ...