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 ======== */
}
分享到:
相关推荐
5. **自定义验证器**:除了预定义的验证类型,开发者还可以通过创建自定义Validator类来扩展验证功能。这可以通过设置`type`属性为自定义类的全限定名,并在`param`子元素中传递必要的参数。 6. **验证流程**:当...
下面将详细介绍Struts Validator框架的关键概念、功能及其实现方式。 1. **验证框架概述** Struts Validator框架通过定义验证规则,对用户输入进行检查,防止无效或不安全的数据进入系统。它提供了XML配置文件和...
Struts是Java Web开发中的一个流行MVC框架,它的核心功能在于帮助开发者构建可扩展、模块化的Web应用程序。Validator框架是Struts的一个重要组件,主要负责处理用户输入的数据验证,确保数据的完整性和正确性。在...
在Struts1.3中,Validator功能得到了进一步的增强和优化,相比Struts1.2,它引入了一些新的特性和改进。 在Struts1.3中,Validator的主要目标是减少程序员编写验证逻辑的工作量,通过配置文件和自定义验证规则实现...
Struts Validator是Struts框架的一个扩展模块,用于处理客户端和服务器端的数据验证。相比于Struts内置的ActionForm Bean验证方式,Struts Validator提供了更灵活、更强大的验证功能,能够处理复杂的验证逻辑,并且...
总的来说,Struts验证器Validator是Struts框架中处理表单验证的重要组件,通过合理的配置和自定义扩展,可以实现强大的数据验证功能。在Eclipse和Maven的帮助下,开发和调试过程更加高效便捷。StrutsValidationDemo...
总结,Struts的Validator框架提供了一种简单而有效的方法来处理Web应用中的数据验证。通过配置XML文件,定义验证规则,你可以轻松检查用户输入,确保数据质量。同时,它还支持自定义验证器和国际化,适应各种复杂的...
Struts2 Plus则是Struts2框架的一个扩展,旨在进一步提高开发效率和增强验证功能,特别是对于数据验证部分。Struts2 Plus在原有的Struts2基础上集成了更加强大的验证机制,使得开发者能够更加便捷地处理用户输入的...
自0.5版以来,Struts Validator就已集成在Struts中,起初作为开发人员包的一部分,随后其核心代码迁移到Jakarta Commons库和Struts特别扩展中,成为Struts 1.1的一个关键特性。由于其易用性和强大的功能,许多开发者...
在压缩包文件"struts validator教程"中,可能包含了关于如何使用Struts Validator的详细教程,包括配置文件示例、ActionForm的编写方法、如何处理验证错误等内容。这些资源对于初学者来说非常有价值,可以帮助他们...
总的来说,Common-Validator与Struts1.x的集成为Java Web开发者提供了便捷的数据验证机制,它简化了验证逻辑的编写,降低了出错的可能性,并且易于扩展和维护。理解并熟练掌握这一框架,对于开发健壮且用户友好的Web...
在这个实例中,我们将深入探讨Struts Validator的使用方法、配置以及如何自定义验证规则。 首先,Struts Validator基于JavaBean属性进行验证,它通过XML配置文件来定义验证规则。这些规则包括必填项检查、数据类型...
可以与Struts和Hibernate无缝集成,提供统一的事务管理、依赖注入等功能,极大地提升了开发效率和系统的可扩展性。 Validator 在这里指的是Struts的验证框架,它用于验证用户输入的数据,确保数据的完整性和合法性...
8. **最佳实践**:博主可能会分享一些使用Struts Validator的最佳实践,如合理划分验证层次,避免过于复杂的XML配置,以及如何有效地处理并发验证等。 9. **版本更新与兼容性**:如果博客较新,可能还会提到Struts...
Struts Validator基于Hibernate Validator引擎,提供了丰富的验证规则和自定义扩展功能。 在Struts的验证流程中,主要有以下步骤: 1. 用户通过浏览器提交表单。 2. Struts框架接收到请求,查找对应的ActionForm...
以下是对Struts Validator使用的一些关键知识点的详细说明: 1. **验证器的扩展性**:在开发过程中,开发人员可以选择扩展`ValidatorForm`或`ValidatorActionForm`来实现表单验证。扩展`ValidatorForm`时,需要确保...
5. 添加Validator验证:在ActionForm中添加验证规则,Struts Validator框架会自动执行这些规则,确保输入数据的有效性。 这样的整合使开发者能够更高效地开发复杂的应用程序,同时降低了组件之间的交互复杂性。对于...
Struts和Tiles以及Validator是Java Web开发中非常重要的框架,它们是Apache Struts项目的一部分,用于构建企业级的MVC(Model-View-Controller)应用。让我们深入了解一下这两个组件及其在Struts 2中的整合。 ...