`
jiayj198609
  • 浏览: 146800 次
  • 性别: 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验证器使用指南

    Struts Validator验证器使用指南 &lt;br&gt;验证器: 从0.5版,验证器在一些form中就已经实现了,他最初包含在开发人员包中,后来核心代码挪到Jakarta Commons包中和Struts特别扩展中作为 Struts 1.1的一部分。...

    实战STRUTS 电子书

    书中还介绍了如何同时使用JSP标签和Velocity模板,并仔细介绍了Struts体系结构以及Struts控制流,同时也说明了如何扩展Struts框架结构。 书中还明确指出了Struts 1.0和1.1版本间的区别,同时还通过实例说明了Struts ...

    精通Struts基于MVC的Java Web设计与开发 孙卫琴 光盘

    第8章到第9章介绍了开发Struts应用的一些实用技术,如Struts框架的扩展点、Struts应用的国际化,Validator验证框架和异常处理机制等。第12章到第16章结合具体的Struts应用实例,详细介绍了Struts的标签库以及Tiles...

    精通 Struts:基于 MVC 的 JavaWeb 设计与开发(PDF)

    第8章到第9章介绍了开发Struts应用的一些实用技术,如Struts框架的扩展点、Struts应用的国际化,Validator验证框架和异常处理机制等。第12章到第16章结合具体的Struts应用实例,详细介绍了Struts的标签库以及Tiles...

    精通Struts_基于MVC的Java Web设计与开发

    第8章到第9章介绍了开发Struts应用的一些实用技术,如Struts框架的扩展点、Struts应用的国际化,Validator验证框架和异常处理机制等。第12章到第16章结合具体的Struts应用实例,详细介绍了Struts的标签库以及Tiles...

    精通struts:基于mvc的java web设计与开发part3

    第8章到第9章介绍了开发Struts应用的一些实用技术,如Struts框架的扩展点、Struts应用的国际化,Validator 验证框架和异常处理机制等。第12章到第16章结合具体的Struts应用实例,详细介绍了Struts的标签库以及Tiles...

    精通struts:基于mvc的java web设计与开发part2

    第8章到第9章介绍了开发Struts应用的一些实用技术,如Struts框架的扩展点、Struts应用的国际化,Validator 验证框架和异常处理机制等。第12章到第16章结合具体的Struts应用实例,详细介绍了Struts的标签库以及Tiles...

    精通struts:基于mvc的java web设计与开发part1

    第8章到第9章介绍了开发Struts应用的一些实用技术,如Struts框架的扩展点、Struts应用的国际化,Validator 验证框架和异常处理机制等。第12章到第16章结合具体的Struts应用实例,详细介绍了Struts的标签库以及Tiles...

    基于MVC的java Web设计与开发

    第8章到第9章介绍了开发Struts应用的一些实用技术,如Struts框架的扩展点、Struts应用的国际化,Validator验证框架和异常处理机制等。第12章到第16章结合具体的Struts应用实例,详细介绍了Struts的标签库以及Tiles...

    Jfinal官网demo

    JFinal教程手册 JFinal特点 MVC 架构,设计精巧,使用简单 遵循 COC 原则,零配置,无 xml 独创 Db + Record 模式,灵活便利 ...功能齐全,拥有 struts2 绝大部分核心功能 体积小仅 303K,且无第三方依赖

    JFinal jar包

    JFinal开发所需的jar包MVC架构,设计精巧,使用简单 遵循COC原则,零配置,无xml 独创Db + Record模式,灵活便利 ActiveRecord支持,使数据库开发...功能齐全,拥有struts2的绝大部分功能 体积小仅248K,且无第三方依赖

    JFinal-手册-1.3

    JFinal有如下主要特点: MVC架构,设计精巧,使用简单 遵循COC原则,零配置,无xml 独创Db + Record模式,灵活便利 ActiveRecord支持,使数据库...功能齐全,拥有struts2的绝大部分功能 体积小仅218K,且无第三方依赖

    JAVA 极速WEB+ORM框架 JFinal

    JFinal有如下主要特点: MVC架构,设计精巧,使用简单 遵循COC原则,零配置,无xml 独创Db + Record模式,灵活便利 ActiveRecord支持,使数据库开发极致快速 ...功能齐全,拥有struts2的绝大部分功能 体积小仅538K

    jfinal demo 3.2

    jfinal demo 3.2 , 学习开发当然要多看代码,jfinal 最新源码。MVC架构,设计精巧,使用简单 遵循COC原则,零配置,无xml 独创Db + Record模式,灵活便利 ...功能齐全,拥有struts2的绝大部分功能 体积小仅538K

    JFinal 是基于 Java 语言的极速 WEB + ORM 框架,.rar

    JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、...功能齐全,拥有struts2的绝大部分功能 体积小仅339K,且无第三方依赖 以下是JFinal实现Blog管理的示例:

    jfinal-1.5

    JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。... 功能齐全,拥有struts2的绝大部分功能 体积小仅218K,且无第三方依赖

    Java极速开发JFinal

    JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。...功能齐全,拥有struts2的绝大部分功能 体积小仅248K,且无第三方依赖

    JFinal-基于 Java 语言的极速 WEB + ORM 框架

    JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。...功能齐全,拥有struts2的绝大部分功能 体积小仅218K,且无第三方依赖

    极速开发环境 jfinal1.2

    JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。...功能齐全,拥有struts2的绝大部分功能 体积小仅218K,且无第三方依赖

    JFinalDemo流程

    JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。... 功能齐全,拥有struts2的绝大部分功能 体积小仅632K,且无第三方依赖

Global site tag (gtag.js) - Google Analytics