Michael Chen's Blog
World in my view is a word of my view

使用buffalo作为webwork的验证机制

01 Dec 2005
昨天在开发中遇到了验证的问题,结果证明,基于异步的服务器端验证是最节省力气并且效果好的。由于2.1.7的xmlhttp验证基本不可用,2.2太丑陋,因此我决定用buffalo实现验证。思考结果是……发现事情是出奇的简单,实现起来美观又优雅。 1 构造一个ValidationService(POJO), 包含一个validate方法: List validate(String namespace, String action, Map pamameters) 这个方法实现很简单,只需要根据namespace和action, 构造一个ActionProxy, 将parameters放到ActionContext中,执行Action.execute, 然后判断这个Action是否为ValidateAware, 如果是,那么调用验证方法,将getFieldErrors中的错误按照name - value的方式作为返回值返回即可。 2 将这个service放到buffalo-service.properties, 或者用Spring集成。这方面不赘述。 3 客户端:
var buffalo = new Buffalo("/appRoot/BUFFALO");
var currentForm = null;
function validate(theForm) {
   currentForm = theForm;
   //组装form内的信息,代码略
   buffalo.remoteCall("validateService.validate",
             [form.namespace, form.action, parameters],
             callback);

   return false;
}

function callback(reply) {
   var result = reply.getResult();
   if (result.length >0) {
            //有错误的处理……
   } else {
      // 无错误就提交
        currentForm.submit();
   }
}
4 webwork中,对form.vm稍微进行修改,加上onsubmit=return validate(this) 即可 完毕。 由于buffalo封装了远程调用以及数据序列化的细节,使得编程更加简单并且清晰了,由于它的小巧和易于集成,使得这些工作只需要做一次,并且对开发者透明。这些代码可以自己封装,并且可以重用。我相信这个封装比webwork 2.2的dwr要好。
blog comments powered by Disqus
Loading

All right reserved, 2004 - 2012

Powered by Github

关于我 | 全部文章 | Atom Feed