Dorado 7 : AjaxValidator(SEUG)

当某一个编辑框的数据校验逻辑是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的客户端。

注意

基于安全考虑如果直接在一个承载BO逻辑的Java类上定义@Expose是不太严谨的,它会导致一些不该暴露的方法也暴露了,更安全的做法请参考: Ajax服务的定义

如果这个类注册到Spring工厂中的bean的id为validators,则根据dorado中Ajax服务定义的规范,那么这个checkAccountName的Ajax服务定位表达式为:validators#checkAccountName

接下来我们只要将AjaxValidator的service值修改为上面计算出来的Ajax服务定位表达式就可以。

当你在编辑框中输出数据时,数据校验器会自动呼叫Validators.java中的checkAccountName方法,并将当前编辑框中的输入值作为方法参数传人。

如果方法抛出异常或者返回一个非空的数据时,Ajax数据校验器都会认为是数据校验失败。

Attachments: