Struts2中的兩種輸入校驗方法

此文章來源於黑馬論壇:http://bbs.itheima.com/forum.php?mod=viewthread&tid=430138&extra=page%3D3

1.struts中提供兩種校驗方法:硬編碼和校驗框架;

硬編碼就是直接寫validate()進行驗證,validate()方法對應execute()方法。

在action裡也可以重新定義method方法,這樣在對應的邏輯處理類中直接定義該方法對應的validate()方法。

如定義了方法abc()

public String abc()

{

System.out.print("hello");

return SUCCESS;

}

public void validateAbc()

{//方法名為validate+方法名(第一個字母大寫)

System.out.println("vailidate abc");

//首先執行validateAbc(),再執行validate()方法,再在執行abc();

//解決方法有兩個:一是去掉validate()方法;二是將validate()方法重命名為validateExecute();

}

public void validate() {

if(null==username||username.length()<6||username.length()>10)

{

//表單中只顯示FILED級別的錯誤信息,不顯示ACTION級別的錯誤信息

//兩種驗證,FILEDERROR存放在MAP中會在標籤庫中顯示,

//而actionerror是存放在LIST裡,不會在標籤庫默認顯示,所以頁面中不會有錯誤提示

this.addFieldError("username","username invalid");

//this.addActionError("username invalid");

}

if

(null==password||password.length()<6||password.length()>10)

{

this.addFieldError("password","密碼不合法");

}

}

校驗框架就是要寫對應該ACION的的xml配置文件,

如針對RegisterAction建立RegisterAction-validation.xml文件進行數據校驗。

<validators>

<validator>

<param>username

<message>姓名不能為空/<message>

<validator>

<param>username

<param>6

<param>10

<message>姓名長度應在${minLength}和${maxLength}之間/<message>

另外例:RegisterAction-test-validation.xml

(類名-方法名-validation.xml專門對該類的test()方法進行校驗,但是首先進行RegisterAction-validation.xml校驗)

所以建議:如果一個action對應多個處理邏輯的方法,不要寫全局的.xml校驗,而應該針對每個邏輯方法寫專門的.xml校驗。

注意:

a. 真正存放field級別錯誤信息的對象是LinkedHashMap

(而且先處理的validation.xml裡面的,然後處理validate()方法裡的)

b. 該LinkedHashMap的key是String類型的,value是ArrayList類型的

c. 對於Action級別的錯誤信息,實際上是放置在ArrayList中的。

struts2同樣支持客戶端校驗:

a.form的theme一定不能設為simple

b.將FORM的validate屬性設為TRUE

但是最好不使用struts2提供客戶端校驗,功能比較弱.

Struts2中的兩種輸入校驗方法


分享到:


相關文章: