書山有路勤為徑,學海無涯苦作舟
Struts2提供了基于驗證框架的輸入校驗,在這種校驗方式下,所有的輸入校驗只需要通過指定的配置文件即可。Struts2中每個Action都有一個校驗文件,其規則為:<Action名字>-validation.xml。如:
package com.struts.test.action; import java.util.Date; import com.opensymphony.xwork2.ActionSupport; public class RegistAction extends ActionSupport { private static final long serialVersionUID = -2113900523366315993L; //該請求包含的4個請求參數 private String name; private String pass; private int age; private Date birth; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Date getBirth() { return birth; } public void setBirth(Date birth) { this.birth = birth; } }
在類RegistAction.class相同目錄下有RegistAction-validation.xml文件:
增加了這個校驗文件后,系統會自動加載該文件,當用戶提交請求的時候,Struts2的校驗框架會根據該文件對用戶的請求進行校驗。當校驗失敗后,Struts2會自動返回名為input的邏輯視圖。我們可以在視圖中添加<s:fielderror/>來查看所返回的校驗失敗信息。
上面的校驗中,我們沒有使用國際化,如需國際化,可將message配置成<message key="name.required">這樣的形式。
上述的校驗是在服務器端進行的,如果需要在客戶端進行校驗,可以將jsp改成struts2的標簽格式,如:
這里需要注意的是,國際化中需要使用<message>${getText("name.required")}</message>這樣的形式。同時,客戶端校驗僅僅支持如下校驗器:
Struts2提供了兩種方式來配置校驗規則:字段校驗器和非字段校驗器風格。這兩種風格其實并沒有本質的不同,只是組織校驗規則的方式不同:一種是字段優先,稱為字段校驗器風格;另外一種是校驗器優先,稱為非字段校驗器風格。
上面的例子RegistAction-validate.xml就是字段優先校驗器風格。如果變成非字段校驗器風格,則如下:
上面的校驗操作并沒有使用短路操作,即當我們使用空字符串提交頁面的時候,會發現error信息是:"您必須輸入用戶名! 您輸入的用戶名只能是字母和數字,且長度必須在4到25之間!"。為了達到短路效果,我們可以在<validator.../>元素或<field-validator.../>元素中增加short-curcuit="true"即可。我們在例子中將name和pass的必填校驗器配置成校驗器,那么當必填校驗器失敗后,同一字段的其他校驗器就不會繼續校驗了。
我們總結一下校驗順序和短路:
校驗器的執行順序有如下原則:
所有非字段風格的校驗器優先于字段風格的校驗器
所有非字段風格的校驗器中,排在前面的會先執行。
所有字段風格的校驗器中,排在前面的會先執行。
校驗器短路的原則是:
所有非字段校驗器是最優先執行,如果某個非字段校驗器校驗失敗了,則該字段上所有字段校驗器都不會獲得校驗的機會。
非字段校驗器的校驗失敗,不會阻止其他非字段校驗的執行。
如果一個字段校驗器校驗失敗后,則該字段下的且排在該校驗失敗的校驗器之后的其他字段校驗器不會獲得校驗的機會。
字段校驗器永遠不會阻止非字段校驗器的執行。
Strut2的一個Action中可能包含多個處理邏輯,當一個Action類包含多個類似于execute的方法時,每個方法都是一個處理邏輯。不同的處理邏輯需要不同的校驗規則,Struts2也提供了對不同Action指定不同校驗規則的的支持。
當需要讓一個Action可以處理多個請求時,需要配置多個邏輯的Action,如:
posted on 2010-10-24 15:01 Brian 閱讀(354) 評論(0) 編輯 收藏 所屬分類: Struts2