一,首先webwork的validator是基于攔截器的,所以首先要配制一下攔截器,默認的攔截器,已經
使用了validator,如果你想定義自己的攔截器組合,記得在你的攔截器的stack中把這句話加入





但是如果你想自己定義,那么記得注冊你的驗證器(Validator),一個簡單的注冊辦法是
添加一個文件名為 validators.xml 的文件在你的classpath (/WEB-INF/classes) 的根目錄下
文件中的內容類似如下:















注意:
1,validators.xml如果已經定義了,那么它應該在classpath中可以找到.然而如果不需要自定義的校驗器,那么這不是必須的.WebWork會自動從發布包里的
xwork jar文件中取得一個事先定義好的校驗器集合(com/opensymphony/xwork/validator/validators/default.xml).
瀏覽ValidatorFactory的static塊來了解詳細信息
2,如果自定義的校驗器被定義了而且創建了一個validators.xml文件并放在classpath中,
記得復制所有其他你需要的預定義的校驗器到validators.xml里,如果你不需要注冊則不需要.
一旦validators.xml在classpath里被檢測到,缺省的 (com/opensymphony/xwork/validator/validators/default.xml)
就不會被裝載了.只有沒發現自定義 validators.xml的時候才會裝載.要小心.這點類似Java中的缺省構造函數
三、定義校驗規則<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="name">
<!--必添-->
<field-validator type="requiredstring">
<!--是否使用trim-->
<param name="trim">true</param>
<!--提示的錯誤信息-->
<message>You must enter a name</message>
</field-validator>
</field>
<field name="currDate">
<field-validator type="date">
<!--最小時間-->
<param name="min">01/01/2007</param>
<!--最大時間-->
<param name="max">02/28/2007</param>
<!--提示的錯誤信息-->
<message>
The date must be between 01-01-2007 and 02-28-2007.
</message>
</field-validator>
</field>
<field name="url">
<!--short-circuit是否短路檢驗,類似&&運算的短路算法-->
<field-validator type="required" short-circuit="true">
<!--提示的錯誤信息-->
<message>You must enter a value for url.</message>
</field-validator>
<!--webwork提供的url驗證-->
<field-validator type="url" short-circuit="true">
<!--提示的錯誤信息-->
<message>Not a valid url.</message>
</field-validator>
</field>
<field name="mail">
<field-validator type="required">
<message>You must enter a value for 郵件.</message>
</field-validator>
<!--mail的驗證,驗證器由webwork提供-->
<field-validator type="email">
<message>Not a valid 郵件.</message>
</field-validator>
</field>
<field name="age">
<field-validator type="int">
<!--同樣的最大最小值-->
<param name="min">1</param>
<param name="max">200</param>
<message>
<!--注意這里,msn中可以用表達式取出值棧中的值例如$
{min}-->
Only people ages $
{min} to $
{max} may be true,otherwise
you are a ghost
</message>
</field-validator>
</field>
<field name="desc">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>You must enter a desc</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">1</param>
<param name="maxLength">10</param>
<!--從屬性文件中取出my.key顯示,如果取不到my.key就顯示
You must enter a desc length=10(my.key)-->
<message key="my.key">
You must enter a desc length=10(my.key)
</message>
</field-validator>
<!--可以使用正則表達式-->
<field-validator type="regex">
<param name="expression">
<![CDATA[([a-z][0-9][A-Z][x])]]>
</param>
<!--message可以由固定的字符串,值棧中的值$
{desc}以及通過調用方法取到的
屬性文件中的值$
{getText('my.key')}-->
<message>
"regex error ${getText('my.key')} ${desc}"
</message>
</field-validator>
</field>
<!--上邊的驗證叫字段驗證,下邊這些驗證叫普通驗證,普通驗證是優于字段驗證的。
在使用短路的時候要小心-->
<!--上邊那些都是基于字段的驗證,這個是基于Action的驗證
如果要在頁面顯示這些消息,需要加入<ww:actionError/>
-->
<validator type="expression">
<!--可以基于表達式的驗證name.equals(desc)-->
<param name="expression">name.equals(desc)</param>
<message>name not the same as desc</message>
</validator>
<!-- Plain Validator 2 -->
<!--可以基于表達式的驗證mail.startsWith('mark')-->
<validator type="expression" short-circuit="true">
<param name="expression">mail.startsWith('mark')</param>
<message>Email does not start with mark</message>
</validator>
</validators>
四、客戶端驗證
加入validate="true"
<ww:form name="test" action="javascriptValidation" validate="true">
...
</ww:form>
這樣的話webwork會根據你的服務器端的驗證,對應生成javaScript的驗證,而且提示信息和服務器端
驗證的方式一樣,而不是alert的方式顯示。(前題是你使用的都是標準的驗證器)
五、
對應上邊驗證器的web頁面


























































































































































































七、簡單提示:屬性文件的名字類名+properties,validator配制文件的名字類名+validation.xml
(還有其它的組合方式)
例如對應的DbAdminAction.java
DbAdminAction-validation.xml
DbAdminAction.properties
注意
許多WebWork 標簽的 required 屬性和客戶端校驗沒有什么關系. 它只是在某個theme(例如xhtml)中用來在一個標識為必填的字段周圍放置一個'*'.
八、上邊程序的示例代碼(從eclipse導出的工程)
http://www.aygfsteel.com/Files/dreamstone/vl.rar