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;
...........................