JFace DataBinding 中的 MultiValidator学习和体会

来源:互联网 发布:反恐精英 起源mac版 编辑:程序博客网 时间:2024/05/21 06:19

在展开讨论前,先看看该类所在的包和继承关系。      

 

org.eclipse.core.databinding.validation
Class MultiValidator

java.lang.Object  extended by org.eclipse.core.databinding.ValidationStatusProvider      extended by org.eclipse.core.databinding.validation.MultiValidator

 

 

       MultiValidator ,A validator for cross-constraints between observables. 按字面意思为可以横跨多个observables约束的验证器。什么叫cross-constraints,感觉比较费解,下面的实例有助于理解该概念。

 

这是摘自在线帮助中的一个实例:

 

 

该例子通过MultiValidator来判断Text输入均为奇数或偶数,每当middle1或者middle2的值发生变化的时候就会触发validate方法。

 

 

MultiValidator也可以防止不合法的数据复制到模型中去,下面的例子就是通过validated observable包装middle1、middle2后,再与模型绑定。

 

 

而middle作为target和model的中介,很好的避免了不合法数据往模型的直接写入。

 

按我的理解,对middle1、middle2的验证就体现了cross-constraints,validate方法是基于middle1、middle2两个原本相对无关联的值联合后进行判断的。

 

个人附注:

      validate方法中引用的observe的对象值发生改变,就会触发MultiValidator的validate方法,如上例只要middle1、middle2的值其中一个发生改变,就会触发validate方法。因此,我们可以利用此特性做一些其他的工作,如在主从(master -details)结构的绑定中,我们可以在当一个detail或一行记录中某个绑定值发生变化的时候,做一些跨域的校验工作(例如:与其他行数据的联合校验)。

 

      总之,MultiValidator在JFace DataBinding中扮演了强大的角色,如果你还没有遇到类似的需求,或由于我的表达能力,你可能未能理解上面的一段个人附注。但只要记住:MultiValidator适用于跨界校验(cross-constraints),只要引用的一个观察值发生变化就会触发验证。这就足够了,只要你使用JFace DataBinding ,终归有一天会用的上的。