当某一个编辑框的数据校验逻辑是Java端的一个已有方法,并且你不想将这个校验逻辑翻译为JS代码在客户端执行的时候,你可以为对应的PropertyDef增加一个AjaxValidator对象。
例如你的Java业务逻辑层已经实现了一个账号的数据校验逻辑:
public String checkAccountName(String parameter) { Employee employee = employeeDao.findUnique( "from Employee where firstName=?", parameter); if (employee == null) { return null; } else { return "帐户名\"" + parameter + "\"已经被人注册了 。"; } }
你可以将这个方法暴露给客户端,便于远程Ajax的调用。
例如:在确保当前类被注册到Spring中的前提下,我们将当前类的声明中添加一个dorado的annotation声明@Expose:
package com.bstek.dorado.sample.data; ... import com.bstek.dorado.annotation.Expose; ... @Expose public class Validators { ... public String checkAccountName(String parameter) { ... } }
把这个标记添加到Java类的声明中是表示,自动将这个类的所有方法都暴露给Dorado的Ajax的客户端。
如果这个类注册到Spring工厂中的bean的id为validators,则根据dorado中Ajax服务定义的规范,那么这个checkAccountName的Ajax服务定位表达式为:validators#checkAccountName
接下来我们只要将AjaxValidator的service值修改为上面计算出来的Ajax服务定位表达式就可以。
当你在编辑框中输出数据时,数据校验器会自动呼叫Validators.java中的checkAccountName方法,并将当前编辑框中的输入值作为方法参数传人。
如果方法抛出异常或者返回一个非空的数据时,Ajax数据校验器都会认为是数据校验失败。
Attachments:
AjaxValidator-properties.png (image/png)