validator驗證框架之理解
看了別人寫的那麼多文章,自己也手癢癢,所以決定也寫一點.談談最近學struts遇到的驗證框架.
驗證框架的使用需要實現這幾步:
1.導包 當然這在struts中已經帶上了
2.編寫Actionfrom類 注意 這裡不是繼承ActionForm 而是繼承ValidatorForm或ValidatorActionForm
其中的Validate方法要去掉 因為在ValidatorForm或ValidatorActionForm 中已經實現了這個方法
3. 在struts-config中配置Form 和 action
4.在Validate.xml中配置驗證欄位
5.寫資源包
下面我就說說其中的具體實現:
一.Validator主要依賴兩個jar包
Jakarta-oro.jar:-提供一組處理文字的類,具有文字替換、過濾、和分割功能。
Commons-validator.jar:提供了一個簡單、可擴充套件的驗證框架,包含了通用的驗證方法和驗證規則。
二.validation.xml,validator-rules.xml
Validator採用基於兩個xml檔案的方式來配置驗證規則,分別為validation.xml,validator-rules.xml。
在struts應用中,需放到web-inf目錄下。
1.validator-rules.xml
這個檔案包含了一組驗證規則,對所有struts應用都適用。一般情況不用修改這個檔案,
除非要修改或擴充套件預設規則。如果要給應放到另一個xml檔案中,而不是直接新增到validator-rules.xml檔案中,
這樣當Validator升級時,不用修改validator-rules.xml檔案。
2.validator.xml檔案
這個檔案是針對於具體struts應用的,他可以為應用中的ActionForm配置驗證規則。
而不用編碼實現驗證。
例如一個驗證登陸form的例子,要求使用者名稱必須填寫,祕密要求必填、最大、最小長度
<form-validation>
<global>
<!-- 密碼由數字、26個英文字母或者下劃線組成的字串 -->
<constant>
<constant-name>pwd</constant-name>
<onstant-value>^\w+$</onstant-value>
</constant>
</global>
<formset>
<form name="loginForm">
<!-- 這裡的使用者名稱使用郵箱,驗證時使用正規表示式進行驗證 -->
<field property="user.userId" depends="required">
<arg0 key="user.userId" />
</field>
<field property="user.userPwd" depends="required,minlength,maxlength,mask">
<!-- msg name="mask" key="errors.invalid" /-->
<arg0 key="user.userPwd" />
<arg1 name="minlength" key="${var:minlength}" resource="false" />
<arg2 name="maxlength" key="${var:maxlength}" resource="false" />
<var>
<var-name>mask</var-name>
<var-value>^\w+$</var-value>
</var>
<var>
<var-name>minlength</var-name>
<var-value>6</var-value>
</var>
<var>
<var-name>maxlength</var-name>
<var-value>20</var-value>
</var>
</field>
</form>
</formset>
</form-validation>
三.Validator外掛
為了在struts中用validator,可以用外掛方式載入Validator框架,
需在struts配置檔案中配置ValidatorPlugIn外掛,同時寫明兩個xml檔案的路徑。
應用啟動時,Strust會載入這個外掛,並呼叫他的init()方法,init()
方法根據pathnames載入相應的validator-xml,validator.xml檔案,把驗證資訊讀入到記憶體中。
程式碼:(一般的IDE工具能自動生成)
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"
property="pathnames" />
</plug-in>
四.Validator和ActionForm
Validator框架不能直接org.apache.struts.action.ActionForm。應採用ActionForm的兩個子類
ValidatorActionForm和ValidatorForm
DynaValidatorActionFrom繼承自DynaValidatorForm
支援動態在ActionFrom中使用Validator框架
ValidatorFormActionForm繼承自ValidatorForm
支援在標準ActionForm中使用Validator框架。
DynaValidtaorForom和ValidatorForm類都實現了validator()方法,如果驗證失敗,
就會返回包含錯誤訊息的ActionMessage物件,並把該物件新增到ActionErrors集合物件中,
由validator方法最後返回ActionErrors物件。
ValidatorForm有一個子類ValidatorActionForm
兩者的具體用法如下:
ValidatorForm (用在同一個form在修改和註冊模組中驗證相同的屬性)
Strust配置檔案的<action>元素的name屬------>validator.xml檔案<form>元素的name屬性
例如:
<action input="/login.jsp" name="loginActionForm" path="/loginAction" scope="request" type="validatetest.action.LoginAction" />
<formset>
<form name="loginActionForm">
<field property="userName" depends="required">
<arg key="error.username"/>
</field>
</form>
</formset>
ValidatorActionForm(用在註冊和登入模組使用同一個form但是驗證的屬性有多有少 不一樣的情況)
Strust配置檔案的<action>元素的path屬------>validator.xml檔案<form>元素的name屬性
例如:
<action input="/login.jsp" name="loginActionForm" path="/userAction1" scope="request" type="validatetest.action.LoginAction" />
<action input="/login.jsp" name="loginActionForm" path="/userAction2" scope="request" type="validatetest.action.LoginAction" />
用的同一個Form 但是驗證的屬性不同(注意path中的"/"一定要帶著)
<formset>
<form name="/userAction1">
<field property="user.userName" depends="required">
<arg key="error.username"/>
</field>
</form>
<form name="/userAction2">
<field property="user.userPwd" depends="required">
<arg key="error.username"/>
</field>
</form>
</formset>
Validator框架提供這兩個類目的在於可以更加精確的控制執行驗證的條件。
而DynaValidatorForm和DynaValidatorActionForm,區別和ValidatorFrom和ValidatorActionForm的區別一樣
在validator框架中使用JavaScript
需要在驗證的頁面中加入<html:javascript formName="/userAction1"/>注意formName是validator.xml中的<form name="/userAction1">
對需要驗證的表單定義onsubmit事件 return方法 為 validate+form名 可以在jsp頁面中檢視原始碼獲得
<html:form action="userAction1" method="post" onsubmit="return validateUserForm(this)">
五 把需要驗證的內容寫到 資源包中
如:
error.user=username is required
error.pwd=userPwd is required
error.username=userName
error.password=password
error.age=age
以下直接從validator-rules.xml檔案中拷過來
# Struts Validator Error Messages
errors.required={0} is required.
errors.minlength={0} can not be less than {1} characters.
errors.maxlength={0} can not be greater than {1} characters.
errors.invalid={0} is invalid.
errors.byte={0} must be a byte.
errors.short={0} must be a short.
errors.integer={0} must be an integer.
errors.long={0} must be a long.
errors.float={0} must be a float.
errors.double={0} must be a double.
errors.date={0} is not a date.
errors.range={0} is not in the range {1} through {2}.
errors.creditcard={0} is an invalid credit card number.
errors.email={0} is an invalid e-mail address.
驗證框架的使用需要實現這幾步:
1.導包 當然這在struts中已經帶上了
2.編寫Actionfrom類 注意 這裡不是繼承ActionForm 而是繼承ValidatorForm或ValidatorActionForm
其中的Validate方法要去掉 因為在ValidatorForm或ValidatorActionForm 中已經實現了這個方法
3. 在struts-config中配置Form 和 action
4.在Validate.xml中配置驗證欄位
5.寫資源包
下面我就說說其中的具體實現:
一.Validator主要依賴兩個jar包
Jakarta-oro.jar:-提供一組處理文字的類,具有文字替換、過濾、和分割功能。
Commons-validator.jar:提供了一個簡單、可擴充套件的驗證框架,包含了通用的驗證方法和驗證規則。
二.validation.xml,validator-rules.xml
Validator採用基於兩個xml檔案的方式來配置驗證規則,分別為validation.xml,validator-rules.xml。
在struts應用中,需放到web-inf目錄下。
1.validator-rules.xml
這個檔案包含了一組驗證規則,對所有struts應用都適用。一般情況不用修改這個檔案,
除非要修改或擴充套件預設規則。如果要給應放到另一個xml檔案中,而不是直接新增到validator-rules.xml檔案中,
這樣當Validator升級時,不用修改validator-rules.xml檔案。
2.validator.xml檔案
這個檔案是針對於具體struts應用的,他可以為應用中的ActionForm配置驗證規則。
而不用編碼實現驗證。
例如一個驗證登陸form的例子,要求使用者名稱必須填寫,祕密要求必填、最大、最小長度
<form-validation>
<global>
<!-- 密碼由數字、26個英文字母或者下劃線組成的字串 -->
<constant>
<constant-name>pwd</constant-name>
<onstant-value>^\w+$</onstant-value>
</constant>
</global>
<formset>
<form name="loginForm">
<!-- 這裡的使用者名稱使用郵箱,驗證時使用正規表示式進行驗證 -->
<field property="user.userId" depends="required">
<arg0 key="user.userId" />
</field>
<field property="user.userPwd" depends="required,minlength,maxlength,mask">
<!-- msg name="mask" key="errors.invalid" /-->
<arg0 key="user.userPwd" />
<arg1 name="minlength" key="${var:minlength}" resource="false" />
<arg2 name="maxlength" key="${var:maxlength}" resource="false" />
<var>
<var-name>mask</var-name>
<var-value>^\w+$</var-value>
</var>
<var>
<var-name>minlength</var-name>
<var-value>6</var-value>
</var>
<var>
<var-name>maxlength</var-name>
<var-value>20</var-value>
</var>
</field>
</form>
</formset>
</form-validation>
三.Validator外掛
為了在struts中用validator,可以用外掛方式載入Validator框架,
需在struts配置檔案中配置ValidatorPlugIn外掛,同時寫明兩個xml檔案的路徑。
應用啟動時,Strust會載入這個外掛,並呼叫他的init()方法,init()
方法根據pathnames載入相應的validator-xml,validator.xml檔案,把驗證資訊讀入到記憶體中。
程式碼:(一般的IDE工具能自動生成)
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"
property="pathnames" />
</plug-in>
四.Validator和ActionForm
Validator框架不能直接org.apache.struts.action.ActionForm。應採用ActionForm的兩個子類
ValidatorActionForm和ValidatorForm
DynaValidatorActionFrom繼承自DynaValidatorForm
支援動態在ActionFrom中使用Validator框架
ValidatorFormActionForm繼承自ValidatorForm
支援在標準ActionForm中使用Validator框架。
DynaValidtaorForom和ValidatorForm類都實現了validator()方法,如果驗證失敗,
就會返回包含錯誤訊息的ActionMessage物件,並把該物件新增到ActionErrors集合物件中,
由validator方法最後返回ActionErrors物件。
ValidatorForm有一個子類ValidatorActionForm
兩者的具體用法如下:
ValidatorForm (用在同一個form在修改和註冊模組中驗證相同的屬性)
Strust配置檔案的<action>元素的name屬------>validator.xml檔案<form>元素的name屬性
例如:
<action input="/login.jsp" name="loginActionForm" path="/loginAction" scope="request" type="validatetest.action.LoginAction" />
<formset>
<form name="loginActionForm">
<field property="userName" depends="required">
<arg key="error.username"/>
</field>
</form>
</formset>
ValidatorActionForm(用在註冊和登入模組使用同一個form但是驗證的屬性有多有少 不一樣的情況)
Strust配置檔案的<action>元素的path屬------>validator.xml檔案<form>元素的name屬性
例如:
<action input="/login.jsp" name="loginActionForm" path="/userAction1" scope="request" type="validatetest.action.LoginAction" />
<action input="/login.jsp" name="loginActionForm" path="/userAction2" scope="request" type="validatetest.action.LoginAction" />
用的同一個Form 但是驗證的屬性不同(注意path中的"/"一定要帶著)
<formset>
<form name="/userAction1">
<field property="user.userName" depends="required">
<arg key="error.username"/>
</field>
</form>
<form name="/userAction2">
<field property="user.userPwd" depends="required">
<arg key="error.username"/>
</field>
</form>
</formset>
Validator框架提供這兩個類目的在於可以更加精確的控制執行驗證的條件。
而DynaValidatorForm和DynaValidatorActionForm,區別和ValidatorFrom和ValidatorActionForm的區別一樣
在validator框架中使用JavaScript
需要在驗證的頁面中加入<html:javascript formName="/userAction1"/>注意formName是validator.xml中的<form name="/userAction1">
對需要驗證的表單定義onsubmit事件 return方法 為 validate+form名 可以在jsp頁面中檢視原始碼獲得
<html:form action="userAction1" method="post" onsubmit="return validateUserForm(this)">
五 把需要驗證的內容寫到 資源包中
如:
error.user=username is required
error.pwd=userPwd is required
error.username=userName
error.password=password
error.age=age
以下直接從validator-rules.xml檔案中拷過來
# Struts Validator Error Messages
errors.required={0} is required.
errors.minlength={0} can not be less than {1} characters.
errors.maxlength={0} can not be greater than {1} characters.
errors.invalid={0} is invalid.
errors.byte={0} must be a byte.
errors.short={0} must be a short.
errors.integer={0} must be an integer.
errors.long={0} must be a long.
errors.float={0} must be a float.
errors.double={0} must be a double.
errors.date={0} is not a date.
errors.range={0} is not in the range {1} through {2}.
errors.creditcard={0} is an invalid credit card number.
errors.email={0} is an invalid e-mail address.
相關文章
- Validator | validate 驗證規則
- 2. 驗證器 Validator
- Between validator常用驗證規則
- Django筆記四十二之model使用validator驗證器Django筆記
- Laravel 驗證器 Validator::make 的用法Laravel
- 使用 Spring Validator 介面實現驗證Spring
- NPM酷庫041:validator,驗證工具集合NPM
- 偷懶之 validator 驗證器免寫 messages 自動中文輸出
- SpringBoot整合Hibernate Validator實現引數驗證功能Spring Boot
- PHP 表單提交後臺資料驗證 ValidatorPHP
- golang常用庫:欄位引數驗證庫-validatorGolang
- Hibernate Validator、Regex 和手動驗證:哪個更快?
- 在非Laravel專案中使用Validator驗證器Laravel
- 用fluent-validator,進行Java服務端驗證Java服務端
- SpringBoot使用validator校驗Spring Boot
- django 驗證碼框架Django框架
- Angular 表單驗證類庫 ngx-validator 1.0 正式釋出Angular
- 酷 Go 推薦 Validator 網路請求資料驗證包Go
- 理解「交叉驗證」(Cross Validation)ROS
- 使用Hibernate-Validator優雅的驗證RESTful Web Services的引數RESTWeb
- gordensong/laravel-table-validator 資料表欄位驗證收集器GoLaravel
- songyz_validator上線,擴充套件validator這麼香麼,可以早下班和女盆友一起擼貓咯之驗證規則(二)套件
- 如何在Go語言中實現表單驗證?整一個validator吧!Go
- 老當機帶你深入理解 Laravel 之驗證器下Laravel
- Go 每日一庫之 validatorGo
- Fluent-Validator 業務校驗器
- Play框架如何驗證使用者框架
- Go 框架 Gin使用 validator 若干實用技巧Go框架
- 驗證碼機制之驗證碼重複使用
- Hibernate Validator校驗引數全攻略
- Struts框架_9 Struts2的驗證框架
- Swift 超簡單的驗證框架ValidateSwiftSwift框架
- Vue筆記之props驗證Vue筆記
- Django之圖形驗證碼Django
- [系列] Gin框架 - 資料繫結和驗證框架
- validation客戶端驗證框架使用手冊客戶端框架
- validator
- Android之window機制token驗證Android
- just-validate瀏覽器端驗證框架示例瀏覽器框架