当某一个编辑框的数据校验逻辑是Java端的一个已有方法,并且你不想将这个校验逻辑翻译为JS代码在客户端执行的时候,你可以为对应的PropertyDef增加一个AjaxValidator对象。
例如你的Java业务逻辑层已经实现了一个账号的数据校验逻辑:
你可以将这个方法暴露给客户端,便于远程Ajax的调用。
例如:在确保当前类被注册到Spring中的前提下,我们将当前类的声明中添加一个dorado的annotation声明@Expose:
把这个标记添加到Java类的声明中是表示,自动将这个类的所有方法都暴露给Dorado的Ajax的客户端。
注意
基于安全考虑如果直接在一个承载BO逻辑的Java类上定义@Expose是不太严谨的,它会导致一些不该暴露的方法也暴露了,更安全的做法请参考: Ajax服务的定义
如果这个类注册到Spring工厂中的bean的id为validators,则根据dorado中Ajax服务定义的规范,那么这个checkAccountName的Ajax服务定位表达式为:validators#checkAccountName
接下来我们只要将AjaxValidator的service值修改为上面计算出来的Ajax服务定位表达式就可以。
当你在编辑框中输出数据时,数据校验器会自动呼叫Validators.java中的checkAccountName方法,并将当前编辑框中的输入值作为方法参数传人。
如果方法抛出异常或者返回一个非空的数据时,Ajax数据校验器都会认为是数据校验失败。