注意:1,validators.xml如果已經(jīng)定義了,那么它應(yīng)該在classpath中可以找到.然而如果不需要自定義的校驗(yàn)器,那么這不是必須的.WebWork會(huì)自動(dòng)從發(fā)布包里的xwork jar文件中取得一個(gè)事先定義好的校驗(yàn)器集合(com/opensymphony/xwork/validator/validators/default.xml). 瀏覽ValidatorFactory的static塊來了解詳細(xì)信息2,如果自定義的校驗(yàn)器被定義了而且創(chuàng)建了一個(gè)validators.xml文件并放在classpath中,記得復(fù)制所有其他你需要的預(yù)定義的校驗(yàn)器到validators.xml里,如果你不需要注冊(cè)則不需要.一旦validators.xml在classpath里被檢測(cè)到,缺省的 (com/opensymphony/xwork/validator/validators/default.xml)就不會(huì)被裝載了.只有沒發(fā)現(xiàn)自定義 validators.xml的時(shí)候才會(huì)裝載.要小心.這點(diǎn)類似Java中的缺省構(gòu)造函數(shù)三、定義校驗(yàn)規(guī)則<!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> <!--提示的錯(cuò)誤信息--> <message>You must enter a name</message> </field-validator> </field> <field name="currDate"> <field-validator type="date"> <!--最小時(shí)間--> <param name="min">01/01/2007</param> <!--最大時(shí)間--> <param name="max">02/28/2007</param> <!--提示的錯(cuò)誤信息--> <message> The date must be between 01-01-2007 and 02-28-2007. </message> </field-validator> </field> <field name="url"> <!--short-circuit是否短路檢驗(yàn),類似&&運(yùn)算的短路算法--> <field-validator type="required" short-circuit="true"> <!--提示的錯(cuò)誤信息--> <message>You must enter a value for url.</message> </field-validator> <!--webwork提供的url驗(yàn)證--> <field-validator type="url" short-circuit="true"> <!--提示的錯(cuò)誤信息--> <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的驗(yàn)證,驗(yàn)證器由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中可以用表達(dá)式取出值棧中的值例如${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> <!--可以使用正則表達(dá)式--> <field-validator type="regex"> <param name="expression"> <![CDATA[([a-z][0-9][A-Z][x])]]> </param> <!--message可以由固定的字符串,值棧中的值${desc}以及通過調(diào)用方法取到的 屬性文件中的值${getText('my.key')}--> <message> "regex error ${getText('my.key')} ${desc}" </message> </field-validator> </field> <!--上邊的驗(yàn)證叫字段驗(yàn)證,下邊這些驗(yàn)證叫普通驗(yàn)證,普通驗(yàn)證是優(yōu)于字段驗(yàn)證的。 在使用短路的時(shí)候要小心--> <!--上邊那些都是基于字段的驗(yàn)證,這個(gè)是基于Action的驗(yàn)證 如果要在頁(yè)面顯示這些消息,需要加入<ww:actionError/> --> <validator type="expression"> <!--可以基于表達(dá)式的驗(yàn)證name.equals(desc)--> <param name="expression">name.equals(desc)</param> <message>name not the same as desc</message> </validator> <!-- Plain Validator 2 --> <!--可以基于表達(dá)式的驗(yàn)證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>
四、客戶端驗(yàn)證加入validate="true"<ww:form name="test" action="javascriptValidation" validate="true"> ...</ww:form>這樣的話webwork會(huì)根據(jù)你的服務(wù)器端的驗(yàn)證,對(duì)應(yīng)生成javaScript的驗(yàn)證,而且提示信息和服務(wù)器端驗(yàn)證的方式一樣,而不是alert的方式顯示。(前題是你使用的都是標(biāo)準(zhǔn)的驗(yàn)證器)五、對(duì)應(yīng)上邊驗(yàn)證器的web頁(yè)面
七、簡(jiǎn)單提示:屬性文件的名字類名+properties,validator配制文件的名字類名+validation.xml(還有其它的組合方式)例如對(duì)應(yīng)的DbAdminAction.javaDbAdminAction-validation.xmlDbAdminAction.properties注意許多WebWork 標(biāo)簽的 required 屬性和客戶端校驗(yàn)沒有什么關(guān)系. 它只是在某個(gè)theme(例如xhtml)中用來在一個(gè)標(biāo)識(shí)為必填的字段周圍放置一個(gè)'*'.
八、上邊程序的示例代碼(從eclipse導(dǎo)出的工程)http://www.tkk7.com/Files/dreamstone/vl.rar