`

struts2的RegexFieldValidator注解的实现

 
阅读更多

struts2的RegexFieldValidator注解的实现:
其实主要也是看看validate方法的实现:

public void validate(Object object) throws ValidationException {
        String fieldName = getFieldName(); // 得到field名称
        Object value = this.getFieldValue(fieldName, object); // 得到field的值
        //这里我们看到为什么在必填项上面我们还要使用一个RequiredStringValidate
        //其实加上很多注解之后感觉代码和不整洁
		// if there is no value - don't do comparison
        // if a value is required, a required validator should be added to the field
        if (value == null || expression == null) {
            return;
        }

        // struts2是有强大的类型转换功能,在验证之前已经有其他的拦截器对
        // 对参数做类型转换了
        // XW-375 - must be a string
        if (!(value instanceof String)) {
            return;
        }

		// 我们看到此时才检验为空的情况,因为现在它肯定是一个string了
        // 我估计在写代码的时候,可能在上面就进行判断了。但是这样很简洁
        // string must not be empty
        String str = ((String) value).trim();
        if (str.length() == 0) {
            return;
        }

        // 这里构造Pattern,来判断是不是大小写敏感的。
        // match against expression
        Pattern pattern;
        if (isCaseSensitive()) {
            pattern = Pattern.compile(expression);
        } else {
            pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
        }

        // 这里又有一个变量,这个实在是想不通,如果不trim,那就直接使用value,
        // 如果trim就使用str就行了,不懂为什么又要引入一个compare变量
        String compare = (String) value;
        if ( trim ) {
            compare = compare.trim();
        }
        Matcher matcher = pattern.matcher( compare );
        
        if (!matcher.matches()) {
            addFieldError(fieldName, object);
        }
    }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics