此文章來源於黑馬論壇: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提供客戶端校驗,功能比較弱.
閱讀更多 黑馬程序員成都中心 的文章