struts-validator应验框架的mask验证器使用的细节说明
struts-validator验证框架的mask验证器使用的细节说明
如下指定arg1元素可以为field正确配置mask:
<arg1 name=”mask” key="${var:mask}" resource="false" >
<var>
<var-name>mask</var-name>
<var-value>^0\d*$</var-value>
</var>
然而,好多人将上面语句<arg1 name=”mask” key="${var:mask}" resource="false" 去掉
后却为什么可以达到一样的目的?花了一下午翻阅jdk,javaeye上搜索,竟然没有查找一
篇文章明确说明这个问题的,难道是约定俗成的,还是什么缘故?
最后还是通过查阅源代码,得到了比文字更有说服力的结果:
<validator name="mask"
classname="org.apache.struts.validator.FieldChecks"
method="validateMask"
..................
public static boolean validateMask(Object bean, ValidatorAction va, Field field,
ActionMessages errors, Validator validator, HttpServletRequest request)
{
String value;
value = null;
value = evaluateBean(bean, field);
String mask = Resources.getVarValue("mask", field, validator, request, true); if(value != null && value.length() > 0 && !GenericValidator.matchRegexp(value,
mask))
{
errors.add(field.getKey(), Resources.getActionMessage(validator, request, va,
field));
return false;
}
try
{
return true;
}
..................
public static String getVarValue(String varName, Field field, Validator validator,
HttpServletRequest request, boolean required)
{
Var var = field.getVar(varName); if(var == null)
{
String msg = sysmsgs.getMessage("variable.missing", varName);
if(required)
throw new IllegalArgumentException(msg);
if(log.isDebugEnabled())
log.debug(field.getProperty() + ": " + msg);
return null;
} else
{
ServletContext application = (ServletContext)validator.getParameterValue
(SERVLET_CONTEXT_PARAM);
return getVarValue(var, application, request, required);
}
.........................
public static String getVarValue(Var var, ServletContext application,
HttpServletRequest request, boolean required)
{
String varName = var.getName();
String varValue = var.getValue();
if(!var.isResource())
return varValue; String bundle = var.getBundle();
MessageResources messages = getMessageResources(application, request,
bundle);
Locale locale = RequestUtils.getUserLocale(request, null);
String value = messages.getMessage(locale, varValue, null);
if(value == null && required)
throw new IllegalArgumentException(sysmsgs.getMessage
("variable.resource.notfound", varName, varValue, bundle));
if(log.isDebugEnabled())
log.debug("Var=[" + varName + "], " + "bundle=[" + bundle + "], " + "key=["
+ varValue + "], " + "value=[" + value + "]");
return value;
.......................
public Field()
{
property = null;
indexedProperty = null;
indexedListProperty = null;
key = null;
depends = null;
page = 0;
fieldOrder = 0;
dependencyList = Collections.synchronizedList(new ArrayList());
hVars = new FastHashMap(); hMsgs = new FastHashMap();
args = new Map[0];
.........................
public void addVar(Var v)
{
hVars.put(v.getName(), v); }
public Var getVar(String mainKey)
{
return (Var)hVars.get(mainKey); }
public String getVarValue(String mainKey)
{
String value = null;
Object o = hVars.get(mainKey);
if(o != null && (o instanceof Var))
{
Var v = (Var)o;
value = v.getValue();
}
return value; }
protected String property;
protected String indexedProperty;
protected String indexedListProperty;
protected String key;
protected String depends;
...........................
如下指定arg1元素可以为field正确配置mask:
<arg1 name=”mask” key="${var:mask}" resource="false" >
<var>
<var-name>mask</var-name>
<var-value>^0\d*$</var-value>
</var>
然而,好多人将上面语句<arg1 name=”mask” key="${var:mask}" resource="false" 去掉
后却为什么可以达到一样的目的?花了一下午翻阅jdk,javaeye上搜索,竟然没有查找一
篇文章明确说明这个问题的,难道是约定俗成的,还是什么缘故?
最后还是通过查阅源代码,得到了比文字更有说服力的结果:
<validator name="mask"
classname="org.apache.struts.validator.FieldChecks"
method="validateMask"
..................
public static boolean validateMask(Object bean, ValidatorAction va, Field field,
ActionMessages errors, Validator validator, HttpServletRequest request)
{
String value;
value = null;
value = evaluateBean(bean, field);
String mask = Resources.getVarValue("mask", field, validator, request, true); if(value != null && value.length() > 0 && !GenericValidator.matchRegexp(value,
mask))
{
errors.add(field.getKey(), Resources.getActionMessage(validator, request, va,
field));
return false;
}
try
{
return true;
}
..................
public static String getVarValue(String varName, Field field, Validator validator,
HttpServletRequest request, boolean required)
{
Var var = field.getVar(varName); if(var == null)
{
String msg = sysmsgs.getMessage("variable.missing", varName);
if(required)
throw new IllegalArgumentException(msg);
if(log.isDebugEnabled())
log.debug(field.getProperty() + ": " + msg);
return null;
} else
{
ServletContext application = (ServletContext)validator.getParameterValue
(SERVLET_CONTEXT_PARAM);
return getVarValue(var, application, request, required);
}
.........................
public static String getVarValue(Var var, ServletContext application,
HttpServletRequest request, boolean required)
{
String varName = var.getName();
String varValue = var.getValue();
if(!var.isResource())
return varValue; String bundle = var.getBundle();
MessageResources messages = getMessageResources(application, request,
bundle);
Locale locale = RequestUtils.getUserLocale(request, null);
String value = messages.getMessage(locale, varValue, null);
if(value == null && required)
throw new IllegalArgumentException(sysmsgs.getMessage
("variable.resource.notfound", varName, varValue, bundle));
if(log.isDebugEnabled())
log.debug("Var=[" + varName + "], " + "bundle=[" + bundle + "], " + "key=["
+ varValue + "], " + "value=[" + value + "]");
return value;
.......................
public Field()
{
property = null;
indexedProperty = null;
indexedListProperty = null;
key = null;
depends = null;
page = 0;
fieldOrder = 0;
dependencyList = Collections.synchronizedList(new ArrayList());
hVars = new FastHashMap(); hMsgs = new FastHashMap();
args = new Map[0];
.........................
public void addVar(Var v)
{
hVars.put(v.getName(), v); }
public Var getVar(String mainKey)
{
return (Var)hVars.get(mainKey); }
public String getVarValue(String mainKey)
{
String value = null;
Object o = hVars.get(mainKey);
if(o != null && (o instanceof Var))
{
Var v = (Var)o;
value = v.getValue();
}
return value; }
protected String property;
protected String indexedProperty;
protected String indexedListProperty;
protected String key;
protected String depends;
...........................