1. validation.xml 中的Resourse属性
------------------------------------------------------------------------------
<field property="username" depends="maxlength">
<arg0 name="maxlength" key="${var:maxlength}" resource="false" />
<var>
<var-name>maxlength</var-name>
<var-value>10</var-value>
</var>
</field>
------------------------------------------------------------------------------
来,我们将它支解掉。:) 好象没有什么好说的。很简单。这是某个form下的一个properties的标准写法。其中我们要重视一下这句话: <arg0 name="maxlength" key="${var:maxlength}" resource="false" /> , resource属性指的是:是从资源文件里面读key的值吗?
if (resource == "false") {
请取当前定义的变量的值。[因为为false的时候,因为得必须得给个值来组装错误信息,因为此时我们不会到消息资源文件里提取值]
} else if (resource == "true) {
请到资源文件里提取用来组装错误消息的值.
}
你会问:如果我不指定resourse的值怎么样?默认是true,即:默认下它会去读properties文件里面的值。 (这似乎与java的boolean的默认是false有点违背),如果我没有配呢?那么是null.
当然我也做了一个实验证明了这点:
properties file tips
------------------------------------------------------------------------------
errors.maxlength = The length of the password can not surpass {0}
------------------------------------------------------------------------------
validation.xml tips :
------------------------------------------------------------------------------
<field property="username" depends="maxlength">
<arg0 name="maxlength" key="${var:maxlength}" resource="false" />
<var>
<var-name>maxlength</var-name>
<var-value>10</var-value>
</var>
</field>
------------------------------------------------------------------------------
如果username的长度超过10的话,那么打印的是:The length of the password can not surpass 10
resouse属性改成true,
properties file tips
------------------------------------------------------------------------------
errors.maxlength = The length of the password can not surpass {0}
username.maxlength = 10
------------------------------------------------------------------------------
validation.xml tips :
------------------------------------------------------------------------------
<field property="username" depends="maxlength">
<arg0 name="maxlength" key="username.maxlength" resource="true" />
<var>
<var-name>maxlength</var-name>
<var-value>10</var-value>
</var>
</field>
------------------------------------------------------------------------------
这样我们也能达到同样的效果。Right? 但是谁愿意呢? 只是我这样写似乎更加容易理解吧.并且这样做就失去了validation的某些特别的功效,你得为每个重新在资源文件里写一条message,不值得。
2. validation.xml 中的msg属性.
官方资料:[The default error message for a pluggable validator can be overriden with the msg element. So instead of using the msg attribute for the mask validator to generate the error message the msg attribute from the field will be used if the name of the field's name attribute matches the validator's name attribute.]后面的例子我也就没有给出来,那么这句话到底在肌理哇啦个什么呢? 先看一小段代码:
------------------------------------------------------------------------------------------------
<field property="username" depends="maxlength">
<arg0 name="maxlength" key="${var:maxlength}" resource="false" />
<var>
<var-name>maxlength</var-name>
<var-value>10</var-value>
</var>
</field>
------------------------------------------------------------------------------------------------
再强调一遍:validation的错误信息是这样组装的:通过arg0 - arg3等来和资源文件里面的并且消息名字在validator-rule.xml定义好的规则所对应的消息来合成的。validator-rule.xml所定义的msg是面向所有的该规则的错误消息,每个form field可以通过arg0-arg3来定制自己的消息(这个我提到过)
如果我们加入msg消息到filed标签下面:
------------------------------------------------------------------------------------------------
<field property="username" depends="maxlength">
<msg name="maxlength" key="msg.maxlength" />
<arg0 name="maxlength" key="${var:maxlength}" resource="false" />
<var>
<var-name>maxlength</var-name>
<var-value>10</var-value>
</var>
</field>
------------------------------------------------------------------------------------------------
那么此时的maxlength在规则里面的msg将会被<field>里面的msg覆盖,也就是说<arg0>的定义形同虚设,更会无视resourse属性的false or true;
3.几个规则(rules)作用于同一个form的属性上面
------------------------------------------------------------------------------------------------
<field property="username" depends="required,maxlength,minlength">
<arg0 name="maxlength" key="${var:maxlength}" resource="false" />
<arg1 name="required" key="prompt.username" />
<arg2 name="minlength" key="${var:minlength}" resource="false" />
<var>
<var-name>maxlength</var-name>
<var-value>10</var-value>
</var>
<var>
<var-name>minlength</var-name>
<var-value>3</var-value>
</var>
</field>
------------------------------------------------------------------------------------------------
如果很多约束针对某一个form的属性,我们可以这样写,当然如果你非要分开写也可以。那么在xml文件中一个form的field就有多条记录.
这里有一点需要注意一下:<arg0><arg1><arg2>在这里定义了以后,别的form的属性也要按照这种顺序来,也就是:<arg0>对应的是 maxlength. <arg1>对应的是minlength.<arg2>对应的是 requried.为什么这样做?
因为在我们的properties文件中是写死的。如果不这样做,那么就会出现得到null值的错误啦.
------------------------------------------------------------------------------------------------
errors.required ={1} is required.
errors.maxlength = The length of the password can not surpass {0}
errors.minlength = The length of the password can not shorter than {2}
------------------------------------------------------------------------------------------------
补充一下validwhen的用法
<field property="emailAddress" depends="validwhen">
<arg0 key="userinfo.emailAddress.label"/>
<var>
<var-name>test</var-name>
<var-value>((sendNewsletter == null) or (*this* != null))</var-value>
</var>
</field>
上面定义的意思是:如果通讯地址是空或不空时这个字段时有效的