Commons-Validator感言

周末感冒了重感冒都要吐血了,猫在家里面养病的时候顺手翻了一下前阵子看到的两个东西:Commons-Validator,EC,花了半天时间翻过了CV的文档,模仿他的例子做了个登陆的验证,做完后感言万分.

我还是第一次写那么麻烦的配置文件:

xml 代码
  1. <validator name="emailValidator"  
  2.     classname="net.pingsoft.atomic.SimpleValidateFormEmailWrapper"  
  3.     method="doEmailValidate" msg="{0}项不是一个正确的Email地址"  
  4.     methodParams="java.lang.Object,org.apache.commons.validator.Field" />  

开始觉得SS1时文档里的语录:"严重BScv的配置文件只顾XML解析器方便不顾程序员方便的写法"严重同意!CV的结构就是这个配置文件的展示,层次结构比较郁闷,如上面配置一个validator就杀去那么多行~幸好有现成的可以用不然第一次写的人肯定要吐血死去.下面是在荒郊野岭中使用纯servlet和jodd这个小东西做的控制器:

java 代码
  1. Customer customer = new Customer();   
  2. // 使用Jodd BeanUtil装载页面bean   
  3. BeanUtil.load(customer, request);   
  4.   
  5. ValidatorResources resources = new ValidatorResources(getClass().getClassLoader().getResourceAsStream(   
  6.         "VCustomer.xml"));   
  7. Validator validator = new Validator(resources, "simpleValidateForm");   
  8. validator.setParameter(Validator.BEAN_PARAM, customer);   
  9. // 进行Validate   
  10. ValidatorResults results = validator.validate();   
  11.   
  12. List errors = new ArrayList();   
  13.   
  14. for (Object property : results.getPropertyNames()) {   
  15.     // 利用这个名字取出各项被v后的结果r,这个r包含了每个验证器对这项的验证结果,如果是有两个校验器叠加到这项上,那么如果第一个   
  16.     // 校验器失败了,那么后面的就不会执行了,返回null而不是false   
  17.     ValidatorResult r = results.getValidatorResult(property.toString());   
  18.   
  19.     // 将Field中的key取出来   
  20.     Arg[] args = r.getField().getArgs("");   
  21.     Object[] errorArg = new Object[args.length];   
  22.     for (int i = 0; i < args.length; i++) {   
  23.         errorArg[i] = args[i].getKey();   
  24.     }   
  25.   
  26.     for (Object o : r.getField().getDependencyList()) {   
  27.         if (!r.isValid((String) o)) {   
  28.             ValidatorAction action = resources.getValidatorAction((String) o);   
  29.             String errorMsg = action.getMsg();   
  30.             // 通过MessageFormat把错误信息和错误参数列和在一起   
  31.             String error = MessageFormat.format(errorMsg, errorArg);   
  32.             errors.add(error);   
  33.         }   
  34.     }   
  35. }  

MessageFormat用起来真是麻烦,不过貌似比较强大,ResourceBundle挺无聊的说...

今天忽然就想写些东西不过想了半天不知道写到那里,忽然想起javaeye哈

你可能感兴趣的:(apache,bean,xml,.net,servlet)