`
jiayj198609
  • 浏览: 149824 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

struts扩展validator功能的一些方法

阅读更多
package cn.bestwiz.jhf.common.admin.common;

import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.text.ParseException;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.apache.commons.logging.Log;
import org.apache.commons.validator.GenericValidator;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.validator.ValidatorForm;
import cn.bestwiz.jhf.common.admin.common.util.ValidatorUtil;
import cn.bestwiz.jhf.core.util.LogUtil;

/**
 * ActionForm's Base Class. 扩展validator功能
 * 
 * @author jiayj198609
 * 
 * 
 * @copyright 
 */
public abstract class BaseForm extends ValidatorForm {

    protected static final Log logger = LogUtil.getLog(BaseForm.class);

    protected static final int CUSTOMERID_LENGTH = 8;

    @Override
    public String toString() {

        return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
    }

    @Override
    public boolean equals(Object o) {

        return EqualsBuilder.reflectionEquals(this, o);
    }

    @Override
    public int hashCode() {

        return HashCodeBuilder.reflectionHashCode(this);
    }

    /**
     * 去除所有字段中首尾多余的空格
     * 
     * @author jiayj198609
     */
    @SuppressWarnings("unchecked")
    public void trimAll() {

        cn.bestwiz.jhf.core.util.BeanUtils.trimAll(this);
    }

    /* ======== 公用校验方法 begin ======== */

    /**
     * 校验字符串是否为空(null、""或只包含空格),为空则报错
     * 
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param str
     *            输入的内容
     * 
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateBlank(String key, String str) {

        return validateBlank(null, key, str);
    }

    /**
     * 校验字符串是否为空(null、""或只包含空格),为空则报错 (错误消息中显示项目的ID)
     * 
     * @param id
     *            项目的ID
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param str
     *            输入的内容
     * 
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateBlank(String id, String key, String str) {

        ActionErrors errors = new ActionErrors();

        String name = StrutsResources.getMessage("form." + key);

        if (!GenericValidator.isBlankOrNull(id)) {
            name = name + "[" + id + "]";
        }

        if (GenericValidator.isBlankOrNull(str)) {
            errors.add(key, new ActionMessage("errors.required", name));
            return errors;
        }

        return errors;
    }

    /**
     * 校验字符串是否为空(null或""),为空则报错
     * 
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param str
     *            输入的内容
     * 
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateEmpty(String key, String str) {

        return validateEmpty(null, key, str);
    }

    /**
     * 校验字符串是否为空(null或""),为空则报错 (错误消息中显示项目的ID)
     * 
     * @param id
     *            项目的ID
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param str
     *            输入的内容
     * 
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateEmpty(String id, String key, String str) {

        ActionErrors errors = new ActionErrors();

        String name = StrutsResources.getMessage("form." + key);

        if (!GenericValidator.isBlankOrNull(id)) {
            name = name + "[" + id + "]";
        }

        if (StringUtils.isEmpty(str)) {
            errors.add(key, new ActionMessage("errors.required", name));
            return errors;
        }

        return errors;
    }

    /**
     * 验证字符串的字节长度是否合法
     * 
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param str
     *            输入的内容 (应为半角字符串)
     * @param minlength
     *            最小长度 (字符串的字节长度)。如果小于等于0,则不限制最小长度
     * @param maxlength
     *            最大长度 (字符串的字节长度)。如果小于0,则不限制最大长度
     * 
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateByteLength(String key, String str, int minlength, int maxlength) {

        return validateByteLength(null, key, str, minlength, maxlength);
    }

    /**
     * 验证字符串的字节长度是否合法 (错误消息中显示项目的ID)
     * 
     * @param id
     *            项目的ID
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param str
     *            输入的内容 (应为半角字符串)
     * @param minlength
     *            最小长度 (字符串的字节长度)。如果小于等于0,则不限制最小长度
     * @param maxlength
     *            最大长度 (字符串的字节长度)。如果小于0,则不限制最大长度
     * 
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateByteLength(String id, String key, String str, int minlength, int maxlength) {

        return validateLength(id, key, str, minlength, maxlength, true);
    }

    /**
     * 验证字符串的字符长度是否合法
     * 
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param str
     *            输入的内容
     * @param minlength
     *            最小长度 (字符串的字符长度)。如果小于等于0,则不限制最小长度
     * @param maxlength
     *            最大长度 (字符串的字符长度)。如果小于0,则不限制最大长度
     * 
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateCharLength(String key, String str, int minlength, int maxlength) {

        return validateCharLength(null, key, str, minlength, maxlength);
    }

    /**
     * 验证字符串的字符长度是否合法 (错误消息中显示项目的ID)
     * 
     * @param id
     *            项目的ID
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param str
     *            输入的内容
     * @param minlength
     *            最小长度 (字符串的字符长度)。如果小于等于0,则不限制最小长度
     * @param maxlength
     *            最大长度 (字符串的字符长度)。如果小于0,则不限制最大长度
     * 
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateCharLength(String id, String key, String str, int minlength, int maxlength) {

        return validateLength(id, key, str, minlength, maxlength, false);
    }

    /**
     * 验证字符串的长度是否合法 (错误消息中显示项目的ID)
     * 
     * @param id
     *            项目的ID
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param str
     *            输入的内容
     * @param minlength
     *            最小长度(字节长度或字符长度)。如果小于等于0,则不限制
     * @param maxlength
     *            最大长度(字节长度或字符长度)。如果小于0,则不限制
     * @param isHalfWidth
     *            是否按半角(即字节长度)进行校验,为true,则校验其字节长度,否则校验其字符长度
     * 
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    private ActionErrors validateLength(String id, String key, String str, int minlength, int maxlength,
            boolean isHalfWidth) {

        ActionErrors errors = new ActionErrors();

        String name = StrutsResources.getMessage("form." + key);

        if (!GenericValidator.isBlankOrNull(id)) {
            name = name + "[" + id + "]";
        }

        if (isHalfWidth) {
            errors.add(validateHalfWidth(id, key, str));
        } else {
            errors.add(validateEmpty(id, key, str));
        }

        if (!errors.isEmpty()) {
            return errors;
        }

        int length = str.length();

        if (maxlength > 0 && maxlength == minlength && length != maxlength) {
            errors.add(key + "FixedLength", new ActionMessage("errors.fixedLength", name, maxlength + ""));
            return errors;
        }

        if (maxlength > 0 && length > maxlength) {
            errors.add(key + "Maxlength", new ActionMessage("errors.maxlength", name, maxlength + ""));
            return errors;
        }

        if (length < minlength) {
            errors.add(key + "Minlength", new ActionMessage("errors.minlength", name, minlength + ""));
            return errors;
        }

        return errors;
    }

    /**
     * 验证字符串的长度是否合法
     * 
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param str
     *            输入的内容
     * 
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateHalfWidth(String key, String str) {

        return validateHalfWidth(null, key, str);
    }

    /**
     * 验证字符串的长度是否合法 (错误消息中显示项目的ID)
     * 
     * @param id
     *            项目的ID
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param str
     *            输入的内容
     * 
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateHalfWidth(String id, String key, String str) {

        ActionErrors errors = new ActionErrors();

        String name = StrutsResources.getMessage("form." + key);

        if (!GenericValidator.isBlankOrNull(id)) {
            name = name + "[" + id + "]";
        }

        errors.add(validateEmpty(id, key, str));

        if (!errors.isEmpty()) {
            return errors;
        }

        int length = str.length();

        if (length != ValidatorUtil.checkLength(str)) {
            errors.add(key + "Word", new ActionMessage("errors.halfwidthchar", name));
            return errors;
        }

        return errors;
    }

    /**
     * 验证半角整数 (视为数字而非文本字符串)
     * 
     * @param decimal
     *            输入的内容
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param maxlength
     *            最大长度 (字符串的字节长度)。如果小于0,则不限制最大长度
     * @param min
     *            最小值。如为null,则不限制。
     * @param max
     *            最大值。如为null,则不限制。
     * @return ActionErrors
     */
    protected ActionErrors validateHalfWidthInteger(String decimal, String key, int maxlength, String min, String max) {

        return validateHalfWidthInteger(null, decimal, key, maxlength, min, max);
    }

    /**
     * 验证半角整数 (视为数字而非文本字符串) (错误消息中显示项目的ID)
     * 
     * @param id
     *            项目的ID
     * @param decimal
     *            输入的内容
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param maxlength
     *            最大长度 (字符串的字节长度)。如果小于0,则不限制最大长度
     * @param min
     *            最小值。如为null,则不限制。
     * @param max
     *            最大值。如为null,则不限制。
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateHalfWidthInteger(String id, String decimal, String key, int maxlength, String min,
            String max) {

        return validateHalfWidthDigit(id, decimal, key, maxlength, -1, 0, min, max);
    }

    /**
     * 验证半角数字 (视为数字而非文本字符串) (不限定整数小数)
     * 
     * @param decimal
     *            输入的内容
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param maxlength
     *            最大长度 (字符串的字节长度)。如果小于0,则不限制最大长度
     * @param min
     *            最小值。如为null,则不限制。
     * @param max
     *            最大值。如为null,则不限制。
     * 
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateHalfWidthDigit(String decimal, String key, int maxlength, String min, String max) {

        return validateHalfWidthDigit(null, decimal, key, maxlength, min, max);
    }

    /**
     * 验证半角数字 (视为数字而非文本字符串) (不限定整数小数) (错误消息中显示项目的ID)
     * 
     * @param id
     *            项目的ID
     * @param decimal
     *            输入的内容
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param maxlength
     *            最大长度 (字符串的字节长度)。如果小于0,则不限制最大长度
     * @param min
     *            最小值。如为null,则不限制。
     * @param max
     *            最大值。如为null,则不限制。
     * 
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateHalfWidthDigit(String id, String decimal, String key, int maxlength, String min,
            String max) {

        return validateHalfWidthDigit(id, decimal, key, maxlength, -1, -1, min, max);
    }

    /**
     * 验证半角数字 (视为数字而非文本字符串)
     * 
     * @param decimal
     *            输入的内容
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param maxlength
     *            最大长度 (字符串的字节长度)。如果小于0,则不限制。
     * @param maxIntLength
     *            整数部分最大位数。如果小于0,则不限制。
     * @param maxDecLength
     *            小数部分最大位数。如果小于0,则不限制。
     * @param min
     *            最小值。如为null,则不限制。
     * @param max
     *            最大值。如为null,则不限制。
     * 
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateHalfWidthDigit(String decimal, String key, int maxlength, int maxIntLength,
            int maxDecLength, String min, String max) {

        return validateHalfWidthDigit(null, decimal, key, maxlength, maxIntLength, maxDecLength, min, max);
    }

    /**
     * 验证半角数字 (视为数字而非文本字符串) (错误消息中显示项目的ID)
     * 
     * @param id
     *            项目的ID
     * @param decimal
     *            输入的内容
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param maxlength
     *            最大长度 (字符串的字节长度)。如果小于0,则不限制。
     * @param maxIntLength
     *            整数部分最大位数。如果小于0,则不限制。
     * @param maxDecLength
     *            小数部分最大位数。如果小于0,则不限制。
     * @param min
     *            最小值。如为null,则不限制。
     * @param max
     *            最大值。如为null,则不限制。
     * 
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateHalfWidthDigit(String id, String decimal, String key, int maxlength,
            int maxIntLength, int maxDecLength, String min, String max) {

        ActionErrors errors = new ActionErrors();
        BigDecimal num = null;
        String name = StrutsResources.getMessage("form." + key);

        if (!GenericValidator.isBlankOrNull(id)) {
            name = name + "[" + id + "]";
        }

        errors.add(validateEmpty(id, key, decimal));

        if (!errors.isEmpty()) {
            return errors;
        }

        errors.add(validateByteLength(id, key, decimal, 0, maxlength));

        if (!errors.isEmpty()) {
            return errors;
        }

        try {
            num = new BigDecimal(decimal);

            int precision = num.precision();
            int scale = num.scale();
            int intLen = precision - scale;

            if (maxIntLength >= 0 && intLen > maxIntLength) {
                errors.add(key + "Maxlength", new ActionMessage("errors.maxIntLength", name, maxIntLength));
                return errors;
            }

            if (maxDecLength > 0 && scale > maxDecLength) {
                errors.add(key + "Maxlength", new ActionMessage("errors.maxDecLength", name, maxDecLength));
                return errors;
            } else if (maxDecLength == 0 && (scale > maxDecLength || !(num.toPlainString()).equals(decimal))) {
                errors.add(key + "Integer", new ActionMessage("errors.integer", name));
                return errors;
            }

            if (!errors.isEmpty()) {
                return errors;
            }
        } catch (Exception e) {
            errors.add(key + "Word", new ActionMessage("errors.halfwidthdigit", name));
            return errors;
        }

        if (!errors.isEmpty()) {
            return errors;
        }

        if (num != null) {

            BigDecimal minnum = null, maxnum = null;

            if (min != null) {
                minnum = new BigDecimal(min);
            }

            if (max != null) {
                maxnum = new BigDecimal(max);
            }

            boolean validMin = (min != null && num.compareTo(minnum) < 0);
            boolean validMax = (max != null && num.compareTo(maxnum) > 0);

            if ((min != null && max != null) && (validMin || validMax)) {
                String errorKey;

                if (maxDecLength == 0) {
                    errorKey = "errors.intrange";
                } else {
                    errorKey = "errors.numrange";
                }

                errors.add(key + "Range", new ActionMessage(errorKey, name, min + "", max + ""));

                return errors;
            } else if (validMax) {
                errors.add(key + "Range", new ActionMessage("errors.numMax", name, max));
                return errors;
            } else if (validMin) {
                errors.add(key + "Range", new ActionMessage("errors.numMin", name, min));
                return errors;
            }
        }

        return errors;
    }

    /**
     * 验证单个的日期是否合法
     * 
     * @param date
     *            输入的内容
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param format
     *            日期的合法格式
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateDate(String date, String key, String format) {

        return validateDate(null, date, key, format);
    }

    /**
     * 验证单个的日期是否合法 (错误消息中显示项目的ID)
     * 
     * @param id
     *            项目的ID
     * @param date
     *            输入的内容
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param format
     *            日期的合法格式
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateDate(String id, String date, String key, String format) {

        ActionErrors errors = new ActionErrors();
        String name = StrutsResources.getMessage("form." + key);

        if (!GenericValidator.isBlankOrNull(id)) {
            name = name + "[" + id + "]";
        }

        errors.add(validateEmpty(id, key, date));

        if (!errors.isEmpty()) {
            return errors;
        }

        if (format.length() != ValidatorUtil.checkLength(date)) {
            errors.add(key + "Format", new ActionMessage("errors.invalidformat", name, format));
            return errors;
        }

        try {
            if (!ValidatorUtil.isValidDateFormat(date, format)) {
                if (!ValidatorUtil.isLatin(date)) {
                    errors.add(key + "Format", new ActionMessage("errors.invalidformat", name, format));
                    return errors;
                }
                errors.add(key + "Value", new ActionMessage("errors.invalidValue", name));
                return errors;

            }
        } catch (ParseException e) {
            errors.add(key + "Format", new ActionMessage("errors.invalidformat", name, format));
            return errors;
        }

        return errors;
    }

    /**
     * 验证枚举值是否合法 (该值是否在该枚举类的定义中)
     * 
     * @param clazz
     *            枚举类Class
     * @param value
     *            输入的值
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateEnum(Class clazz, String value, String key) {

        return validateEnum(null, clazz, value, key);
    }

    /**
     * 验证枚举值是否合法 (该值是否在该枚举类的定义中) (错误消息中显示项目的ID)
     * 
     * @param id
     *            项目的ID
     * @param clazz
     *            枚举类Class
     * @param value
     *            输入的值
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    @SuppressWarnings("unchecked")
    protected ActionErrors validateEnum(String id, Class clazz, String value, String key) {

        ActionErrors errors = new ActionErrors();
        String name = StrutsResources.getMessage("form." + key);

        if (!GenericValidator.isBlankOrNull(id)) {
            name = name + "[" + id + "]";
        }

        errors.add(validateEmpty(id, key, value));

        if (!errors.isEmpty()) {
            return errors;
        }

        Object obj = null;

        Method met = null;

        try {
            met = clazz.getMethod("getEnum", int.class);
            obj = met.invoke(null, Integer.parseInt(value));

            if (obj == null) {
                errors.add(key, new ActionMessage("errors.invalid", name));
                return errors;
            }
        } catch (NoSuchMethodException e) {
        } catch (NumberFormatException e) {
            if (met != null) {
                errors.add(key, new ActionMessage("errors.invalid", name));
                return errors;
            }
        } catch (Exception e) {
            errors.add(key, new ActionMessage("errors.invalid", name));
            return errors;
        }

        if (obj == null) {
            try {
                met = clazz.getMethod("getEnum", String.class);
                obj = met.invoke(null, value);
            } catch (Exception e) {
                errors.add(key, new ActionMessage("errors.invalid", name));
                return errors;
            }
        }

        if (obj == null) {
            errors.add(key, new ActionMessage("errors.invalid", name));
            return errors;
        }

        return errors;
    }

    /**
     * 验证半角英数
     * 
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param str
     *            输入的内容
     * @param maxlength
     *            最大长度 (字符串的字节长度)
     * @param minlength
     *            最小长度 (字符串的字节长度)
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateHalfWidthDigitorAlpha(String key, String str, int maxlength, int minlength) {

        return validateHalfWidthDigitorAlpha(null, key, str, maxlength, minlength);
    }

    /**
     * 验证半角英数 (错误消息中显示项目的ID)
     * 
     * @param id
     *            项目的ID
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param str
     *            输入的内容
     * @param maxlength
     *            最大长度 (字符串的字节长度)
     * @param minlength
     *            最小长度 (字符串的字节长度)
     * 
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateHalfWidthDigitorAlpha(String id, String key, String str, int maxlength, int minlength) {

        ActionErrors errors = new ActionErrors();

        String name = StrutsResources.getMessage("form." + key);

        if (!GenericValidator.isBlankOrNull(id)) {
            name = name + "[" + id + "]";
        }

        errors.add(validateEmpty(id, key, str));

        if (!errors.isEmpty()) {
            return errors;
        }

        errors.add(validateByteLength(id, key, str, minlength, maxlength));

        if (!errors.isEmpty()) {
            return errors;
        }

        if (!ValidatorUtil.isHalfWidthDigitorAlpha(str)) {
            errors.add(key + "Word", new ActionMessage("errors.halfwidthenanddigit", name));
            return errors;
        }

        return errors;
    }

    /**
     * 验证半角整数 (视为字符串而非数字,即允许多余的0)
     * 
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param str
     *            输入的内容
     * @param maxlength
     *            最大长度 (字符串的字节长度)
     * @param minlength
     *            最小长度 (字符串的字节长度)
     * 
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateHalfWidthDigitorStr(String key, String str, int maxlength, int minlength) {

        return validateHalfWidthDigitorStr(null, key, str, maxlength, minlength);
    }

    /**
     * 验证半角整数 (视为字符串而非数字,即允许多余的0)
     * 
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param str
     *            输入的内容
     * @param maxlength
     *            最大长度 (字符串的字节长度)
     * @param minlength
     *            最小长度 (字符串的字节长度)
     * @param min
     *            最小值。如为null,则不限制。
     * @param max
     *            最大值。如为null,则不限制。
     * 
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateHalfWidthDigitorStr(String key, String str, int maxlength, int minlength,
            String min, String max) {

        return validateHalfWidthDigitorStr(null, key, str, maxlength, minlength, min, max);
    }

    /**
     * 验证半角整数 (视为字符串而非数字,即允许多余的0) (错误消息中显示项目的ID)
     * 
     * @param id
     *            项目的ID
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param str
     *            输入的内容
     * @param maxlength
     *            最大长度 (字符串的字节长度)
     * @param minlength
     *            最小长度 (字符串的字节长度)
     * 
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateHalfWidthDigitorStr(String id, String key, String str, int maxlength, int minlength) {

        return validateHalfWidthDigitorStr(id, key, str, maxlength, minlength, null, null);
    }

    /**
     * 验证半角整数 (视为字符串而非数字,即允许多余的0) (错误消息中显示项目的ID)
     * 
     * @param id
     *            项目的ID
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param str
     *            输入的内容
     * @param maxlength
     *            最大长度 (字符串的字节长度)
     * @param minlength
     *            最小长度 (字符串的字节长度)
     * @param min
     *            最小值。如为null,则不限制。
     * @param max
     *            最大值。如为null,则不限制。
     * 
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateHalfWidthDigitorStr(String id, String key, String str, int maxlength, int minlength,
            String min, String max) {

        ActionErrors errors = new ActionErrors();

        String name = StrutsResources.getMessage("form." + key);

        if (!GenericValidator.isBlankOrNull(id)) {
            name = name + "[" + id + "]";
        }

        errors.add(validateEmpty(id, key, str));

        if (!errors.isEmpty()) {
            return errors;
        }

        errors.add(validateByteLength(id, key, str, minlength, maxlength));

        if (!errors.isEmpty()) {
            return errors;
        }

        if (!ValidatorUtil.isHalfWidthDigit(str)) {
            errors.add(key + "Word", new ActionMessage("errors.halfwidthdigit", name));
            return errors;
        }

        return validateHalfWidthDigit(id, str, key, maxlength, min, max);
    }

    /**
     * 验证全角字符串
     * 
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param str
     *            输入的内容
     * @param maxlength
     *            最大长度 (字符串的字符长度)
     * @param minlength
     *            最小长度 (字符串的字符长度)
     * 
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateFullWidthStr(String key, String str, int maxlength, int minlength) {

        return validateFullWidthStr(null, key, str, maxlength, minlength);
    }

    /**
     * 验证全角字符串 (错误消息中显示项目的ID)
     * 
     * @param id
     *            项目的ID
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param str
     *            输入的内容
     * @param maxlength
     *            最大长度 (字符串的字符长度)
     * @param minlength
     *            最小长度 (字符串的字符长度)
     * 
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateFullWidthStr(String id, String key, String str, int maxlength, int minlength) {

        ActionErrors errors = new ActionErrors();

        String name = StrutsResources.getMessage("form." + key);

        if (!GenericValidator.isBlankOrNull(id)) {
            name = name + "[" + id + "]";
        }

        errors.add(validateEmpty(id, key, str));

        if (!errors.isEmpty()) {
            return errors;
        }

        errors.add(validateCharLength(id, key, str, minlength, maxlength));

        if (!errors.isEmpty()) {
            return errors;
        }

        if (str.length() == ValidatorUtil.checkLength(str) || !ValidatorUtil.isFullWidth(str)) {
            errors.add(key + "Word", new ActionMessage("errors.fullwidthchar", name));
            return errors;
        }

        return errors;
    }

    /**
     * 校验全角假名内容
     * 
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param str
     *            输入的内容
     * @param maxlength
     *            最大长度 (字符串的字节长度)
     * @param minlength
     *            最小长度 (字符串的字节长度)
     * 
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateFullWidthKana(String key, String str, int maxlength, int minlength) {

        ActionErrors errors = new ActionErrors();

        String name = StrutsResources.getMessage("form." + key);

        errors.add(validateEmpty(null, key, str));

        if (!errors.isEmpty()) {
            return errors;
        }

        errors.add(validateCharLength(null, key, str, minlength, maxlength));

        if (!errors.isEmpty()) {
            return errors;
        }

        if (str.length() == ValidatorUtil.checkLength(str) || !ValidatorUtil.isFullWidthKana(str)) {
            errors.add(key + "Word", new ActionMessage("errors.fullwidthkanaword", name));
            return errors;
        }

        return errors;
    }

    /**
     * 校验片假名内容
     * 
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param str
     *            输入的内容
     * @param maxlength
     *            最大长度 (字符串的字节长度)
     * @param minlength
     *            最小长度 (字符串的字节长度)
     * 
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateHirahiramei(String key, String str, int maxlength, int minlength) {

        ActionErrors errors = new ActionErrors();

        String name = StrutsResources.getMessage("form." + key);

        errors.add(validateEmpty(null, key, str));

        if (!errors.isEmpty()) {
            return errors;
        }

        errors.add(validateCharLength(null, key, str, minlength, maxlength));

        if (!errors.isEmpty()) {
            return errors;
        }

        if (!ValidatorUtil.isHirahiramei(str)) {
            errors.add(key + "Word", new ActionMessage("errors.hirahirameiword", name));
            return errors;
        }

        return errors;
    }

    /**
     * 校验全角文字或半角英数内容
     * 
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param str
     *            输入的内容
     * @param maxlength
     *            最大长度 (字符串的字节长度)
     * @param minlength
     *            最小长度 (字符串的字节长度)
     * 
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateFullWidthStrOrHalfWidthDigitorAlpha(String key, String str, int maxlength,
            int minlength) {

        ActionErrors errors = new ActionErrors();

        String name = StrutsResources.getMessage("form." + key);

        errors.add(validateEmpty(null, key, str));

        if (!errors.isEmpty()) {
            return errors;
        }

        errors.add(validateCharLength(null, key, str, minlength, maxlength));

        if (!errors.isEmpty()) {
            return errors;
        }

        int length = str.length();

        for (int i = 0; i < length; i++) {
            char chr = str.charAt(i);

            if (!ValidatorUtil.isFullWidth(chr) && !ValidatorUtil.isHalfWidthDigit(chr)
                    && !ValidatorUtil.isHalfWidthAlpha(chr)) {
                errors.add(key + "Word", new ActionMessage("errors.fullwidthcharOrHalfwidthenanddigit", name));
                return errors;
            }

        }

        return errors;
    }

    /**
     * 验证半角英文
     * 
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param str
     *            输入的内容
     * @param maxlength
     *            最大长度 (字符串的字节长度)
     * @param minlength
     *            最小长度 (字符串的字节长度)
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateHalfWidthAlpha(String key, String str, int maxlength, int minlength) {

        return validateHalfWidthAlpha(null, key, str, maxlength, minlength);
    }

    /**
     * 验证半角英文 (错误消息中显示项目的ID)
     * 
     * @param id
     *            项目的ID
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param str
     *            输入的内容
     * @param maxlength
     *            最大长度 (字符串的字节长度)
     * @param minlength
     *            最小长度 (字符串的字节长度)
     * 
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateHalfWidthAlpha(String id, String key, String str, int maxlength, int minlength) {

        ActionErrors errors = new ActionErrors();

        String name = StrutsResources.getMessage("form." + key);

        if (!GenericValidator.isBlankOrNull(id)) {
            name = name + "[" + id + "]";
        }

        errors.add(validateEmpty(id, key, str));

        if (!errors.isEmpty()) {
            return errors;
        }

        errors.add(validateByteLength(id, key, str, minlength, maxlength));

        if (!errors.isEmpty()) {
            return errors;
        }

        if (!ValidatorUtil.isHalfWidthAlpha(str)) {
            errors.add(key + "Word", new ActionMessage("errors.halfwidthalpha", name));
            return errors;
        }

        return errors;
    }

    /* ======== 公用校验方法 end ======== */

    /* ======== 常用属性校验方法 begin ======== */

    /**
     * 验证口座番号是否合法 (应为9位半角整数)
     * 
     * @param customerId
     *            口座番号
     * 
     * @return ActionErrors
     * 
     * @author yaolin <yaolin@bestwiz.cn>
     */
    protected ActionErrors validateCustomerId(String customerId) {

        String key = "customer_id";

        return validateCustomerId(key, customerId);
    }

    /**
     * 验证口座番号是否合法 (应为9位半角整数)
     * 
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param customerId
     *            口座番号
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateCustomerId(String key, String customerId) {

        return validateHalfWidthDigitorStr(key, customerId, CUSTOMERID_LENGTH, CUSTOMERID_LENGTH);
    }

    /**
     * 验证口座番号是否合法 (应为9位半角整数)
     * 
     * @param customerId
     *            口座番号
     * 
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateCustomerIdOrLoginId(String customerId) {

        String key = "customer_id";

        return validateCustomerIdOrLoginId(key, customerId);
    }
    
    /**
     * 验证口座番和社内使用的ID号是否合法 (应为9位半角整数)
     * 
     * @param key
     *            该项属性key (根据form.key从消息映射文件中获取属性名称)
     * @param customerId
     *            口座番号
     * @return ActionErrors
     * 
     * @author jiayj198609
     */
    protected ActionErrors validateCustomerIdOrLoginId(String key, String customerId) {
        
        return validateHalfWidthDigitorAlpha(key, customerId, CUSTOMERID_LENGTH, CUSTOMERID_LENGTH);
    }
    /* ======== 常用属性校验方法 end ======== */
}
分享到:
评论

相关推荐

    Struts的Validator-rules详解

    5. **自定义验证器**:除了预定义的验证类型,开发者还可以通过创建自定义Validator类来扩展验证功能。这可以通过设置`type`属性为自定义类的全限定名,并在`param`子元素中传递必要的参数。 6. **验证流程**:当...

    struts validator验证框架项目

    下面将详细介绍Struts Validator框架的关键概念、功能及其实现方式。 1. **验证框架概述** Struts Validator框架通过定义验证规则,对用户输入进行检查,防止无效或不安全的数据进入系统。它提供了XML配置文件和...

    struts中使用validator验证框架

    Struts是Java Web开发中的一个流行MVC框架,它的核心功能在于帮助开发者构建可扩展、模块化的Web应用程序。Validator框架是Struts的一个重要组件,主要负责处理用户输入的数据验证,确保数据的完整性和正确性。在...

    struts1.3实现的Validator简单验证

    在Struts1.3中,Validator功能得到了进一步的增强和优化,相比Struts1.2,它引入了一些新的特性和改进。 在Struts1.3中,Validator的主要目标是减少程序员编写验证逻辑的工作量,通过配置文件和自定义验证规则实现...

    Struts Validator验证框架详细讲解.txt

    Struts Validator是Struts框架的一个扩展模块,用于处理客户端和服务器端的数据验证。相比于Struts内置的ActionForm Bean验证方式,Struts Validator提供了更灵活、更强大的验证功能,能够处理复杂的验证逻辑,并且...

    struts验证器validator使用,以及自定义验证器

    总的来说,Struts验证器Validator是Struts框架中处理表单验证的重要组件,通过合理的配置和自定义扩展,可以实现强大的数据验证功能。在Eclipse和Maven的帮助下,开发和调试过程更加高效便捷。StrutsValidationDemo...

    Struts的Validator验证框架使用教程

    总结,Struts的Validator框架提供了一种简单而有效的方法来处理Web应用中的数据验证。通过配置XML文件,定义验证规则,你可以轻松检查用户输入,确保数据质量。同时,它还支持自定义验证器和国际化,适应各种复杂的...

    Struts2-plus.rar_plus_struts2 plus_struts2 validator _strutsplus

    Struts2 Plus则是Struts2框架的一个扩展,旨在进一步提高开发效率和增强验证功能,特别是对于数据验证部分。Struts2 Plus在原有的Struts2基础上集成了更加强大的验证机制,使得开发者能够更加便捷地处理用户输入的...

    Struts Validator验证器使用指南

    自0.5版以来,Struts Validator就已集成在Struts中,起初作为开发人员包的一部分,随后其核心代码迁移到Jakarta Commons库和Struts特别扩展中,成为Struts 1.1的一个关键特性。由于其易用性和强大的功能,许多开发者...

    IBM 的 Struts validator框架

    在压缩包文件"struts validator教程"中,可能包含了关于如何使用Struts Validator的详细教程,包括配置文件示例、ActionForm的编写方法、如何处理验证错误等内容。这些资源对于初学者来说非常有价值,可以帮助他们...

    struts1.x使用common-validator验证框架

    总的来说,Common-Validator与Struts1.x的集成为Java Web开发者提供了便捷的数据验证机制,它简化了验证逻辑的编写,降低了出错的可能性,并且易于扩展和维护。理解并熟练掌握这一框架,对于开发健壮且用户友好的Web...

    struts validator验证实例

    在这个实例中,我们将深入探讨Struts Validator的使用方法、配置以及如何自定义验证规则。 首先,Struts Validator基于JavaBean属性进行验证,它通过XML配置文件来定义验证规则。这些规则包括必填项检查、数据类型...

    Struts Hibernate Spring 集成开发宝典 validator

    可以与Struts和Hibernate无缝集成,提供统一的事务管理、依赖注入等功能,极大地提升了开发效率和系统的可扩展性。 Validator 在这里指的是Struts的验证框架,它用于验证用户输入的数据,确保数据的完整性和合法性...

    struts validator?

    8. **最佳实践**:博主可能会分享一些使用Struts Validator的最佳实践,如合理划分验证层次,避免过于复杂的XML配置,以及如何有效地处理并发验证等。 9. **版本更新与兼容性**:如果博客较新,可能还会提到Struts...

    Struts validator验证框架

    Struts Validator基于Hibernate Validator引擎,提供了丰富的验证规则和自定义扩展功能。 在Struts的验证流程中,主要有以下步骤: 1. 用户通过浏览器提交表单。 2. Struts框架接收到请求,查找对应的ActionForm...

    Struts Validator验证器使用指南.doc

    以下是对Struts Validator使用的一些关键知识点的详细说明: 1. **验证器的扩展性**:在开发过程中,开发人员可以选择扩展`ValidatorForm`或`ValidatorActionForm`来实现表单验证。扩展`ValidatorForm`时,需要确保...

    Struts+hibernate+spring+tiles+validator的整合

    5. 添加Validator验证:在ActionForm中添加验证规则,Struts Validator框架会自动执行这些规则,确保输入数据的有效性。 这样的整合使开发者能够更高效地开发复杂的应用程序,同时降低了组件之间的交互复杂性。对于...

    struts-tiles和validator-strut2教程pdf

    Struts和Tiles以及Validator是Java Web开发中非常重要的框架,它们是Apache Struts项目的一部分,用于构建企业级的MVC(Model-View-Controller)应用。让我们深入了解一下这两个组件及其在Struts 2中的整合。 ...

Global site tag (gtag.js) - Google Analytics