2.Validator框架由Validator檢驗類,Validator配置文件,資源配置文件和JSP標簽庫組成..
(1).Validator檢驗類
該類是在進行檢驗類時所需要的一個java類.每一次檢驗的發生都會調用該檢驗類中的方法,該檢驗類的方法只針對一種檢驗規則,但是通過配置文件的聲明,可以使檢驗類規則產生合作.組合成更復雜的檢驗規則.
(2).Validator配置文件
Validator-rule.xml是檢驗規則配置文件,定義了應用程序中可以使用Validators檢驗規則.換句話就是將所有可用的檢驗規則聲明在Validator-rule.xml中等待被調用.
Validator.xml是具體檢驗配置文件,將Validator-rules,xml中的檢驗和應用結合起來的配置文件.他的名稱并不一定是"validator.xml";可以自定義.甚至可以不用該文件而直接在Validator-rules.xml中指定具體檢驗.但為了降低偶合,還是應該分出該配置文件.
(3).資源配置文件
該文件就是報錯信息文件,是為了將檢驗的出錯信息顯示給客戶端而使用的.就Struts框架和Validator框架協同工作來看,可以認為它就是Struts的resource 綁定所指定的資源配置文件.
(4).JSP標簽
JSP用于讀取資源配置文件中的報錯信息顯示出來.Strts框架中許多與資源配置文件相關的標簽都實現了這種工能,另外,<html:javascropt>標簽可以直接從validator框架中的validaotr-rulse.xml中得到javascrupt的檢驗結果.
(2)Validator-rule.xml文件
Validator框架是通過聲明的方式,而不是編程的方式來調用檢驗規則,因此配置文件Validator-rules.xml十分重要,在Validator-rules.xml中講檢驗類所實現的檢驗規則和聲明表示銜接起來,提供聲明實現
Validator-rules.xml文件
Validator框架是通過聲明的方式,而不是編程的方式來調用檢驗規則.因此配置文件Validator-rules.xml十分重要,在Validator-rules.xml中將檢驗類所實現的檢驗規則和聲明標識銜接起來,提供聲明的實現.
簡單的Validator-rules.xml
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
<!--
-->
<form-validation>
<global> //所有檢驗規則的聲明都被定義<global>元素下作為其子元素
<validator name="required"//每個validator都代表一個檢驗規則,name屬性是該檢驗規則的聲明標識
classname="org.apache.struts.validator.FieldChecks"//檢驗規則的實體類
method="validateRequired"http://檢驗類中的方法名,指定聲明標識將調用該方法來進行檢驗
methodParams="java.lang.Object,//檢驗類所需要的傳入參數
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
msg="errors.required">//msg屬性指定了報錯信息在資源配置文件中的"鍵值",通過該"鍵值"從資源配置文件中找到該條報錯信息,并顯示出來.
</validator>
<validator name="integer"
classname="org.apache.struts.validator.FieldChecks"
method="validateInteger"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends=""
msg="errors.integer"
</validator>
<validator name="range"
classname="org.apache.struts.validator.FieldChecks"
method="validateIntRange"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends="integer"
msg="errors.range">
</validator>
</global>
</form-validation>
3個<validator>元素的校驗規則
*校驗值是否不為空或不為null
*校驗值是否可以安全轉換為integer型
*校驗該校驗值的范圍是否在最大和最小值之間
<validator>元素還有其他屬性來幫助實現其他功能
name屬性為range的<validator>元素擁有depends屬性,并指定屬性的內容為"integer"
depends屬性的含義是:本<validator>校驗規則必須依賴另一個檢驗規則而實現.換句話說,就是必須先校驗depends屬性所指定的<validator>檢驗規則,通過后才會校驗自身規則.depends屬性的內容應該是另一組<validator>校驗規則的聲明.
(2)2
validator.xml文件
該文件是將validator-rules.xml中的校驗和應用程序結合起來的配置文件,有了validator-rule.xml后,只要通過validator,.xml將它與具體校驗邏輯結合,就能完成真正的具體校驗
結合validator.xml的ActionForm
validator框架的ActionForm
package struts.sample.cap5.sample.form;
import org.apache.struts.validator.ValidatorForm;
public class CheckForm extends ValidatorForm{//不能繼承普通的ActionForm,必須繼承自ValidatorForm或ValidatorActionForm.若是動態ActionForm,則需要繼續于DynaValidatorFor或DynaValidatorActionForm
private sring userName;
private int age;
private string email;
private string password;
public String getUserName(){
return userName;
}
public String getUserName(){
return userName;
}
public void setUserName(String userName){
this.userName=userName;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age=age;
}
public String getEmail(){
return email;
}
public void setEmail(string email){
this.email=email;
}
public String getPassWord(){
return password;
}
public void setPassword(String password){
this.password=password;
}
}
*ValidatorForm(或DynaValidatorFor)將根據surut-config.xml文件中<action>的name屬性,為當前ActionForm調用相應的校驗規則,這在validator.xml中可以看到
*ValidatorActionForm(或DynaValidatorActionForm)使用struts-config.xml中<action>的path屬性,為當前ActionForm調用相應的檢驗規則.