中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Java > 第三方类库
Jakarta Commons Validator
作者:未知 时间:2005-07-24 21:26 出处:JR 责编:chinaitpower
              摘要:Jakarta Commons Validator
作者:jini         来源:java 公开原始码报



SECTION 01 Validator 总览 

Validate 验证, 这件事情, 写程序是非常重要的, 要先判断数据是否正确, 才让动作或事件继续执行下去, 那么, 每次都写相同的验证模式, 不如对于这个 JavaBean 的数据验证透过 XML 的设定, 如果正确则为验证成功, 发生错误则为验证失败. 对于完全没有用过 Bean Validation 的人来说, 听起来, 可能有点吃力, 不过看过例子可能就了解了. 





SECTION 02 基本范例

大家可以查看 org.apache.commons.validator.example.* 的文件, 其实很简单, 只有 ValidateExample.java 及 ValidateBean.java 这两个程序, 还有 validator-example.xml 来作为 Bean 的验证设定. 另外 applicationResources.properties 是设定多国语言 (i18n) 

大家可以直接参阅 ValidateExample, 设定 Validator 的方法其实很简单 
建立 ValidatorResource Instance , 并且取得验证的配置文件 

ValidatorResources resources = new ValidatorResources();
in = ValidateExample.class.getResourceAsStream("validator-example.xml");
ValidatorResourcesInitializer.initialize(resources, in);
            
建立要被验证的 JavaBean 

ValidateBean bean = new ValidateBean();

建立验证者, 并且告知是哪个 JavaBean 需要验证 

Validator validator = new Validator(resources, "ValidateBean");
validator.addResource(Validator.BEAN_KEY, bean);

建立验证结果储存区, 将验证结果放入 

ValidatorResults results = null;
results = validator.validate();

ValidatorResults 是一个 HashMap 储存 ValidateResult, 他是依照 property 为 key, 

ValidatorResult result = results.getValidatorResult(propertyName); 

取出 ValidatorResult; 接著用 isValid() method 去判断是否验证成功. 




SECTION 03 validator-example.xml 



   <global>
      <validator name="int"
                 classname="org.apache.commons.validator.TestTypeValidator"
                 method="validateInt"
                 methodParams="java.lang.Object,org.apache.commons.validator.Field"
                 msg="errors.int"/>

      <validator name="required"
                 classname="org.apache.commons.validator.TestValidator"
                 method="validateRequired"
                 methodParams="java.lang.Object,org.apache.commons.validator.Field"
                 msg="errors.required"/>
   </global>
   <formset>
      <form name="ValidateBean">
         <field property="firstName"  depends="required">
                <arg0 key="nameForm.firstname.displayname"/>
         </field>    

      </form>
   </formset>   
</form-validation>



在 global 的地方是告知, 各种情况需要用到那一个 Validator 来判断, 并且设定错误讯息, 将会参考 ApplicationResource.properties 的内容来显示, 而 form 的判断模式, 可以放入显示时候的名称, "errors.required=The {0} field is required." 如果发生验证失败, 将会把 nameForm.firstname.displayname ( 也就是写在 properties 中的 First Name ) 取代 {0} 的地方 


SECTION 04 Validator 的写法 

最重要的就是写 public static boolean validateXxxxx( Object bean, Field field ) 这样的 method 

public class TestValidator {
                                                          
   /**
    * Checks if the field is required.
    *
    * @param     value         The value validation is being performed on.
    * @return    boolean        If the field isn't null and 
    *                           has a length greater than zero, 
    *                           true is returned.  
    *                           Otherwise false.
   */
   public static boolean validateRequired(Object bean, Field field) {
      String value = ValidatorUtil.getValueAsString(bean, field.getProperty());

      return !GenericValidator.isBlankOrNull(value);
   }
}  




SECTION 05 GenericValidator 

目前 GenericValidator 提供了 
isBlankOrNull(java.lang.String value) : 检查是否为空值,及去掉空白后长度是否大于零 
isByte(java.lang.String value) : 是否可以转成 byte 
isCreditCard(java.lang.String value) : 是否为正确的信用卡号 
isDate(java.lang.String value, java.util.Locale locale) : 是否为有效的日期, 可依照区域别判断 
isDate(java.lang.String value, java.lang.String datePattern, boolean strict) : 是否为有效的日期, 可输入日期格式, 是否需要完全符合 
isDouble(java.lang.String value) : 是否可以转成 double 
isEmail(java.lang.String value) : 是否为有效的 Email 
isFloat(java.lang.String value) : 是否可以转成 float 
isInRange(double value, double min, double max) : 输入数值是否在此区间 ( double ) 
isInRange(float value, float min, float max) : 输入数值是否在此区间 ( float ) 
isInRange(int value, int min, int max) : 输入数值是否在此区间 ( int ) 
isInRange(short value, short min, short max) : 输入数值是否在此区间 ( short ) 
isInt(java.lang.String value) : 是否可以转成 int 
isLong(java.lang.String value) : 是否可以转成 long 
isShort(java.lang.String value) : 是否可以转成 short 
matchRegexp(java.lang.String value, java.lang.String regexp) : 是否符合输入的 Regular Expression 
maxLength(java.lang.String value, int max) : 长度不得大于输入值 
minLength(java.lang.String value, int min) : 长度不得小于输入值 
我认为最好用的就是 matchRegexp 可以设定成各式各样的判断. 


SECTION 06 Struts Validator 

原本最早 , Struts-validate 是由 http://home.earthlink.net/~dwinterfeldt/revision.html 这里开始的, 2002 初开始使用 commons-validator, 就转移到 jakarta 继续开发, 你会发现 commons-validator 的开发人员都是 struts 的开发人员. 


在 struts 可以透过 plug-in 设定 struts-config.xml 

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    <set-property property="pathnames" 
             value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>

ValidatorPlugIn.java , 是一个实现 PlugIn ( "init()" & "destroy()" ) 的一个 Servlet 

public class ValidatorPlugIn implements PlugIn {
    public void init(ActionServlet servlet, ModuleConfig config)
        throws ServletException {
        ......
        initResources();
        ......
    }

    protected void initResources() throws IOException, ServletException {
        ......
        ValidatorResourcesInitializer.initialize(resources, bis, false);
        ......
    }

    public void destroy() {
        .....
    }
}

而 ValidatorResourcesInitializer 就是属于 commons-validator 的组件, 

另外的 /WEB-INF/validator-rules.xml, 包含了 client 端 javascirpt 的验证, 和 commons-validator 的验证.

最后的 /WEB-INF/validation.xml, 就是针对 FormBean 来作验证, 当然你可以自行用 commons-validator 对于 ValueObject 作验证. 


SECTION 07 总结 

如果不是要与 EIS ( DB layer ) 层级作处理的, 大家可以对于输入的资料通过 Validator 标准的模式, 撰写自己公司商业逻辑的 validator. 


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有