在《Strutsx系列教程()Validator驗證框架入門》一文中給出的例子中的nameage和email都是簡單的屬性如果是嵌套的屬性(也就是一個屬性的數據類型是另外一個帶有屬性的類)可以使用圓點()符號來訪問如我們可以通過設置<field>元素的property屬性值為employeesalary來驗證employee屬性中的salary屬性
如果要驗證的索引屬性我們可以使用<field>元素的indexedListProperty屬性來指定這個索引屬性如下面代碼如示
<field indexedListProperty=items depends=
>
</field>
在使用上述配置代碼後Validator框架將會按著depends屬性中的約束來驗證items屬性的每一個值我們還可以將property和indexedListProperty配合使用如下面代碼所示
<field indexedListProperty=items property=employeeage depends=
>
</field>
Validator框架將根據上述的配置代碼來驗證items屬性中的每一項的employeeage屬性
二使用常量和變量
常量
在《Strutsx系列教程()Validator驗證框架入門》一文中的name屬性使用了mask進行驗證這個mask實際上代表了一個正則表達式但如果在validatorxml文件中有很多個地方需要用到這個正則表達式那就它就會在很多地方重復為此我們可以使用常量來避免這種事情發生
常量分為全局常量和局部常量
()全局常量
全局常量可以被用在validatorxml中定義的所有form中我們可以使用<global>元素來配置全局常量為了配置全局常量將如下的內容放到第一個<formset>元素的前面
<global>
<constant>
<constantname>mask</constantname>
<constantvalue> ^[azAZ]*$ </constantvalue>
</constant>
</global>
<formset>
()局部常量
局部常量需要放到<formset>元素的開始位置(根據DTD的定義局部常量只能放到這裡而全局常量可以放在第一個<formset>元素的前面也可以放到<formset>的後面)如下面的代碼所示
<formset>
<constant>
<constantname>mask</constantname>
<constantvalue> ^[azAZ]*$ </constantvalue>
</constant>
<form name=firstValidatorForm> ![](http://tw.wingwit.com/Article/UploadFiles/201311/2013112320191934.gif)
![](http://tw.wingwit.com/Article/UploadFiles/201311/2013112320191934.gif)
</formset>
我們可以編寫如下的代碼來使用mask常量
<var>
<varname>mask</varname>
<varvalue> ${mask}</varvalue>
</var>
變量
Validator框架通過<var>元素來定義變量變量將作為<field>的子元素被使用主要向depends屬性值(如mask)以及<msg>的錯誤信息傳遞數據如下面的代碼通過變量required將姓名傳遞給了錯誤信息的第一個參數{}
<field property=name depends=required >
<msg name=required key=errornameblank />
<arg name=required key=${var:required} position= resource=false />
<var>
<varname>required</varname>
<varvalue>姓名</varvalue>
</var>
</field>
三客戶端驗證
使用Validator框架的好處之一就是可以很容易地將服務端驗證變為客戶端驗證(JavaScript驗證)為了完成這一轉換我們只需要修改兩個地方現在就拿《Strutsx系列教程()Validator驗證框架入門》中的firstValidatorjsp為例來說明要修改什麼
首先在firstValidatorjsp中的任何地方(當然任何地方指的是客戶端代碼區並不包括<%……%>和<%——…… ——%>所包含的內容)添加如下的<htmljavascript>標簽
<html:javascript formName=firstValidatorForm/>
然後在<htmlform>標簽中加入如下的屬性
onsubmit=return validateFirstValidatorForm(this);
現在再運行firstValidatorjsp如果輸入錯誤IE就會直接彈出錯誤信息對話框我們查看客戶端源代碼就會發現在源代碼中多了很多JavaScript代碼實際上當加入<htmljavascript>標簽後在運行JSP頁面時Servlet引擎就會將Validator框架中JavaScript版本的預定義驗證代碼連同HTML代碼都發送到客戶端這些JavaScript代碼中有一個入口函數這個函數的名稱前綴為validate後面是首字母大寫的Form名在<htmlform>標簽中的onsubmit事件中調用這個入口函數就可以通過JavaScript代碼來驗證客戶端錄入的數據了
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28301.html