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>
上面定義的意思是:如果通訊地址是空或不空時這個字段時有效的