在展开讨论前,先看看该类所在的包和继承关系。
org.eclipse.core.databinding.validation
Class MultiValidator
java.lang.Object org.eclipse.core.databinding.ValidationStatusProvider 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 ,终归有一天会用的上的。