2.Validator框架由Validator檢驗(yàn)類,Validator配置文件,資源配置文件和JSP標(biāo)簽庫組成..
(1).Validator檢驗(yàn)類
該類是在進(jìn)行檢驗(yàn)類時(shí)所需要的一個(gè)java類.每一次檢驗(yàn)的發(fā)生都會調(diào)用該檢驗(yàn)類中的方法,該檢驗(yàn)類的方法只針對一種檢驗(yàn)規(guī)則,但是通過配置文件的聲明,可以使檢驗(yàn)類規(guī)則產(chǎn)生合作.組合成更復(fù)雜的檢驗(yàn)規(guī)則.
(2).Validator配置文件
Validator-rule.xml是檢驗(yàn)規(guī)則配置文件,定義了應(yīng)用程序中可以使用Validators檢驗(yàn)規(guī)則.換句話就是將所有可用的檢驗(yàn)規(guī)則聲明在Validator-rule.xml中等待被調(diào)用.
Validator.xml是具體檢驗(yàn)配置文件,將Validator-rules,xml中的檢驗(yàn)和應(yīng)用結(jié)合起來的配置文件.他的名稱并不一定是"validator.xml";可以自定義.甚至可以不用該文件而直接在Validator-rules.xml中指定具體檢驗(yàn).但為了降低偶合,還是應(yīng)該分出該配置文件.
(3).資源配置文件
該文件就是報(bào)錯(cuò)信息文件,是為了將檢驗(yàn)的出錯(cuò)信息顯示給客戶端而使用的.就Struts框架和Validator框架協(xié)同工作來看,可以認(rèn)為它就是Struts的resource 綁定所指定的資源配置文件.
(4).JSP標(biāo)簽
JSP用于讀取資源配置文件中的報(bào)錯(cuò)信息顯示出來.Strts框架中許多與資源配置文件相關(guān)的標(biāo)簽都實(shí)現(xiàn)了這種工能,另外,<html:javascropt>標(biāo)簽可以直接從validator框架中的validaotr-rulse.xml中得到j(luò)avascrupt的檢驗(yàn)結(jié)果.
(2)Validator-rule.xml文件
Validator框架是通過聲明的方式,而不是編程的方式來調(diào)用檢驗(yàn)規(guī)則,因此配置文件Validator-rules.xml十分重要,在Validator-rules.xml中講檢驗(yàn)類所實(shí)現(xiàn)的檢驗(yàn)規(guī)則和聲明表示銜接起來,提供聲明實(shí)現(xiàn)
Validator-rules.xml文件
Validator框架是通過聲明的方式,而不是編程的方式來調(diào)用檢驗(yàn)規(guī)則.因此配置文件Validator-rules.xml十分重要,在Validator-rules.xml中將檢驗(yàn)類所實(shí)現(xiàn)的檢驗(yàn)規(guī)則和聲明標(biāo)識銜接起來,提供聲明的實(shí)現(xiàn).
簡單的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> //所有檢驗(yàn)規(guī)則的聲明都被定義<global>元素下作為其子元素
<validator name="required"//每個(gè)validator都代表一個(gè)檢驗(yàn)規(guī)則,name屬性是該檢驗(yàn)規(guī)則的聲明標(biāo)識
classname="org.apache.struts.validator.FieldChecks"//檢驗(yàn)規(guī)則的實(shí)體類
method="validateRequired"http://檢驗(yàn)類中的方法名,指定聲明標(biāo)識將調(diào)用該方法來進(jìn)行檢驗(yàn)
methodParams="java.lang.Object,//檢驗(yàn)類所需要的傳入?yún)?shù)
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
msg="errors.required">//msg屬性指定了報(bào)錯(cuò)信息在資源配置文件中的"鍵值",通過該"鍵值"從資源配置文件中找到該條報(bào)錯(cuò)信息,并顯示出來.
</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個(gè)<validator>元素的校驗(yàn)規(guī)則
*校驗(yàn)值是否不為空或不為null
*校驗(yàn)值是否可以安全轉(zhuǎn)換為integer型
*校驗(yàn)該校驗(yàn)值的范圍是否在最大和最小值之間
<validator>元素還有其他屬性來幫助實(shí)現(xiàn)其他功能
name屬性為range的<validator>元素?fù)碛衐epends屬性,并指定屬性的內(nèi)容為"integer"
depends屬性的含義是:本<validator>校驗(yàn)規(guī)則必須依賴另一個(gè)檢驗(yàn)規(guī)則而實(shí)現(xiàn).換句話說,就是必須先校驗(yàn)depends屬性所指定的<validator>檢驗(yàn)規(guī)則,通過后才會校驗(yàn)自身規(guī)則.depends屬性的內(nèi)容應(yīng)該是另一組<validator>校驗(yàn)規(guī)則的聲明.
(2)2
validator.xml文件
該文件是將validator-rules.xml中的校驗(yàn)和應(yīng)用程序結(jié)合起來的配置文件,有了validator-rule.xml后,只要通過validator,.xml將它與具體校驗(yàn)邏輯結(jié)合,就能完成真正的具體校驗(yàn)
結(jié)合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.若是動態(tài)ActionForm,則需要繼續(xù)于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)將根據(jù)surut-config.xml文件中<action>的name屬性,為當(dāng)前ActionForm調(diào)用相應(yīng)的校驗(yàn)規(guī)則,這在validator.xml中可以看到
*ValidatorActionForm(或DynaValidatorActionForm)使用struts-config.xml中<action>的path屬性,為當(dāng)前ActionForm調(diào)用相應(yīng)的檢驗(yàn)規(guī)則.