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