struts2类型转换+校验
http://383984216-qq-com.iteye.com/blog/1151938
1.action中validate()與validateXxx()
用于action執(zhí)行前的校驗(yàn),如果校驗(yàn)失敗,跳到input視圖,
前者校驗(yàn)整個(gè)Action;
后者校驗(yàn)該Action中的Xxx方法.
如果兩者都有,則validateXxx方法會(huì)先調(diào)用。
2.struts2中輸入校驗(yàn)的流程
a.類型轉(zhuǎn)換器將用戶請(qǐng)求字符串的參數(shù)轉(zhuǎn)化為java類型,并將其設(shè)為Action的屬性值。
b.如果轉(zhuǎn)換過程中出現(xiàn)異常,異常將保存在ActionContext中,conversionError攔截器負(fù)責(zé)將其封裝到fieldError中,否則直接到c,類型轉(zhuǎn)換完畢。
c.通過反射調(diào)用validateXxx(),然后調(diào)用validate()。
d.如果上面3步?jīng)]有出現(xiàn)fieldError,則調(diào)用action的處理請(qǐng)求方法,否則跳到input視圖.
3.struts2校驗(yàn)框架
校驗(yàn)配置文件的DTD在xword-core-2.2.3.jar中,系統(tǒng)自帶的校驗(yàn)器的xml配置文件是
xword-core-2.2.3.jar里的com.opensymphony.xword2.vilidator.validators.default.xml文件
校驗(yàn)配置文件名稱必須為
ActionClassName-validation.xml:Action類名-validation.xml
ActionClassName-ActoinAliasName-validation.xml:Action類名-類別名-validation.xml
類別名為在struts.xml中action的name屬性名。
如果要輸出國際化信息,則使用<message key="資源文件鍵名">或<message>${getText("資源文件鍵名")</message>
以上是服務(wù)器校驗(yàn),如果需要客戶端校驗(yàn),可以在提供了服務(wù)器校驗(yàn)的基礎(chǔ)上,在<s:form>中添加validation="true"屬性,這樣,客戶端會(huì)根據(jù)服務(wù)端校驗(yàn)框架自動(dòng)生產(chǎn)客戶端的javascript語句,但不是所有的系統(tǒng)自帶校驗(yàn)器都支持生成客戶端校驗(yàn)?zāi)_本。
注:如果配置的自帶的校驗(yàn)器不支持生成客戶端腳本,而客戶端form又設(shè)置了validation="true",那么將會(huì)報(bào)錯(cuò):
4.struts2校驗(yàn)文件的搜索順序
如果定義了Test-validation.xml和Test-login-validation.xml兩個(gè)文件,那么,系統(tǒng)對(duì)于login請(qǐng)求,會(huì)先搜索Test-validation.xml文件,找到后并不停止搜索,而是繼續(xù)找Test-login-validation.xml文件,如果兩個(gè)都找到的話,那么對(duì)login請(qǐng)求的驗(yàn)證為這兩個(gè)文件的總和,而不是其中的一個(gè),如果Test繼承BaseTest的話,那么系統(tǒng)會(huì)先搜索BaseTest類的兩個(gè)校驗(yàn)文件,然后也不停止,繼續(xù)找Test類的兩個(gè)校驗(yàn)文件,然后將4個(gè)文件合并一起校驗(yàn),如果其中有沖突,那么后找到的校驗(yàn)文件將覆蓋先找到的校驗(yàn)文件。
5.struts2校驗(yàn)文件的兩種書寫風(fēng)格
a.字段風(fēng)格
b.非字段風(fēng)格
其中short-circuit(短路)屬性值為boolean,默認(rèn)為false,即不支持短路
6.校驗(yàn)順序玉短路原則
注:字段校驗(yàn)器指必須提供字段的校驗(yàn)器,而不是指字段校驗(yàn)風(fēng)格,非字段同理。
校驗(yàn)順序
a.所有非字校驗(yàn)器優(yōu)先于字段校驗(yàn)器(所以,字段校驗(yàn)器永遠(yuǎn)不會(huì)影響非字段校驗(yàn)器)
b.所有字段與非字段風(fēng)格按編寫先后順序執(zhí)行
短路原則:
a.當(dāng)非字段校驗(yàn)失敗,則該字段的字段校驗(yàn)器不會(huì)獲得校驗(yàn)機(jī)會(huì),但不影響其他非字段校驗(yàn)
b.字段校驗(yàn)失敗,則在此失敗處代碼以下的該字段的所有字段校驗(yàn)器不會(huì)獲得校驗(yàn)機(jī)會(huì)
注:短路原則是為了不讓一個(gè)字段同時(shí)出現(xiàn)多條驗(yàn)證失敗的提示信息,如驗(yàn)證date不能為空且必須大于2000-01-01,那么如果輸入的是空值且定義short-circuit="false"的話,頁面將會(huì)顯示這兩種驗(yàn)證的message.
7.配置自定義的校驗(yàn)器
將default.xml文件復(fù)制到classes目錄下,然后在里面添加自定義的校驗(yàn)器配置,因?yàn)槿绻x了自己的校驗(yàn)器配置文件在classes目錄下,那么系統(tǒng)將不再會(huì)加載default.xml文件里的內(nèi)容。
總結(jié)
以上是生活随笔為你收集整理的struts2类型转换+校验的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: struts2 的错误信息: java.
- 下一篇: 详解struts2中struts.pro