從Struts 1.2之後開始支援,其內容最主要的目的是
在我們驗證目前Field的值的時候,可能要從其他Field的值綜合起來進行判斷
譬如,我要驗證當購買數量的欄位值不為空的時候 那麼到貨日期也不能為空
首先 要使用 Validwhen 的話記得要放入 antlr.jar 檔
否則當 Struts 在進行驗證的時候會拋出如下的錯誤訊息
java.lang.noclassdeffounderror antlr/ token stream
以下貼出一段範例解說
<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>
emailAddress 是欄位名稱,要採用validwhen rule 的話,在depends要使用 validwhen 這個關鍵字
在var標籤裡的<var-name>需用test的的值
而<var-value>則是你描述驗證的地方,這部份Expression須為一個布林值,
用上面那段程式來看,其實就是描述了
當 sendNewsletter 如果等於空或是null OR emailAddress 不等於空或是null 的話那麼
這個 validation rule 就會 pass 過去,其中我們可以用 and 或是 or 來串接多個驗證條件
注意的是,這裡的 null 可以 match 成 Field 為Null 外,也包括空字串喔!
而 *this* 則表示了當前這個的 Field 的值,以上的範例就是指emailAddress
最後提醒一下再使用 ValidWhen 的時候,<var-value>內的判斷式
都必須用括號包住,就算你只有一個判斷條件也是如此
沒有留言:
張貼留言