欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Struts Validator驗證器使用指南

Struts Validator驗證器使用指南


(根據Struts Validator Guide


作者:


David Winterfeldt大衛


James Turner詹姆斯


Rob Leland羅伯特


翻譯:


       侯思超


驗證器:


0.5版,驗證器在一些form中就已經(jīng)實(shí)現了,他最初包含在開(kāi)發(fā)人員包中,后來(lái)核心代碼挪到Jakarta Commons包中和Struts特別擴展中作為 Struts 1.1的一部分。許多開(kāi)發(fā)者為方便一直使用struts驗證器,這篇文檔首先概述驗證器的核心功能性,然后大概介紹在 struts1.1中的變化和新增功能。


如果你配置好驗證器插件,你應該擴展ValidatorForm而不是ActionForm,以便它能加載你的Validator資源。他根據struts-config.xml文件中的actionname屬性為當前form的調用相應的驗證器,因此在validator-rules.xml中的form元素的名稱(chēng)屬性應該與actionname屬性值相匹配。


另外一種選擇是擴展ValidatorActionForm 而不是ValidatorForm,ValidatorActionForm使用struts-config.xmlactionpath屬性,所以path屬性的值相應的應該與validator-rules.xml中的Formname屬性匹配。


一個(gè)分離的action可以定義給多頁(yè)form的每個(gè)頁(yè)面,而且驗證規則可以與action關(guān)聯(lián)而不是與頁(yè)碼,就像驗證范例中的多頁(yè)form范例那樣。


國際化


validator-rules.xml 文件中form的驗證規則可以組織為FormSet。FormSet 有與java.util.Locale 類(lèi)相應的屬性:如語(yǔ)言, 國家以及變量型屬性,如果他們未定義,FormSet 將把它設置為默認值。一個(gè)FormSet 也可以有關(guān)聯(lián)的常量。另外還可以定義與FormSet 同一級別的全局global元素,他與FormSet同樣也有常量。


注意:你必須在國際化的FormSet前聲明一個(gè)沒(méi)有國際化的默認FormSet。這樣如果Validator沒(méi)有找到locale時(shí)可以有一個(gè)默認版本。


       可插入驗證器的默認錯誤信息值可以被msg元素覆蓋。所以為mask驗證器生成錯誤信息的替代方法就是使用msg屬性,如果字段的name屬性與驗證器的name屬性匹配,那末將使用字段的msg屬性。


       error messages的可以設置arg0-arg3 等參數元素。如果沒(méi)有設置arg0-arg3name屬性, error messages將使用他們作為默認的構建參數值。如果設置了name屬性,你就可以把參數指定給一特定的可插入驗證器,然后這些參數將在構造錯誤信息時(shí)被使用。


<field


property="lastName"


depends="required,mask">


<msg


name="mask"


key="registrationForm.lastname.maskmsg"/>


<arg0 key="registrationForm.lastname.displayname"/>


<var>


<var-name>mask</var-name>


<var-value>^[a-zA-Z]*$</var-value>


</var>


</field>


默認的arg0-arg3元素將在消息資源中查找相應的key,如果資源屬性設為false,她將把值直接傳進(jìn)去,而不從消息資源中查找。注意1.1版本中,你必須為每個(gè)模塊中明確地定義在驗證中用到的消息資源,否則將使用top-level資源。


<field


property="integer"


depends="required,integer,intRange">


<arg0 key="typeForm.integer.displayname"/>


<arg1


name="range"


key="${var:min}"


resource="false"/>


<arg2


name="range"


key="${var:max}"


resource="false"/>


<var>


<var-name>min</var-name>


<var-value>10</var-value>


</var>


<var>


<var-name>max</var-name>


<var-value>20</var-value>


</var>


</field>


常量/變量


全局的常量可以在全局標簽中定義,FormSet/本地常量能在formset 標簽中創(chuàng )建。常量當前僅僅是代替字段的property屬性,字段的var 元素的 value屬性,字段的msg 元素的 key屬性,字段的arg0-arg3 元素的 key屬性。字段的變量也可以在arg0-arg3 元素中被代替(例如:${var:min}))。替換的順序是FormSet/Locale常量第一,全局的常量第二,


arg elements 變量最后。


<global>


<constant>


<constant-name>zip</constant-name>


<constant-value>^\d{5}(-\d{4})?$</constant-value>


</constant>


</global>


 


<field


property="zip"


depends="required,mask">


<arg0 key="registrationForm.zippostal.displayname"/>


<var>


<var-name>mask</var-name>


<var-value>${zip}</var-value>


</var>


</field>


驗證器可以使用字段下面的變量部分來(lái)存儲變量,這些變量通過(guò)字段的getVar(String key)方法取得。


<field


property="integer"


depends="required,integer,intRange">


<arg0 key="typeForm.integer.displayname"/>


<arg1


name="range"


key="${var:min}" resource="false"/>


<arg2


name="range"


key="${var:max}" resource="false"/>


<var>


<var-name>min</var-name>


<var-value>10</var-value>


</var>


<var>


<var-name>max</var-name>


<var-value>20</var-value>


</var>


</field>


使用validwhen設計復雜的驗證


使用validwhen來(lái)設計復雜驗證的一個(gè)經(jīng)常的要求就是根據一個(gè)字段驗證另外一個(gè)字段(比如, 如果你要用戶(hù)兩次輸入口令來(lái)確認值口令一致),另外一個(gè)就是表單中的一個(gè)字段只有另外一個(gè)字段有確定值的時(shí)候才是必須輸入的。新的validwhen驗證規則將很快被包含在1.1后的STRUTS版本中,她就是用來(lái)處理這種情況的。


       validwhen 規則處理單個(gè)的變量字段,叫測試。這變量的值是一個(gè)布爾的表達式,如果驗證有效則它必須為真??梢园@種變量的表達式有:


u       單引號或雙引號字符串literals,


u       十進(jìn)制、十六進(jìn)制、八進(jìn)制的Integer literals,


u       nullnull和空字符串匹配,


u       其它可以用屬性名引用的form字段,例如customerAge,


u       可以在外部因用得索引字段, 例如childLastName[2],


u       可以默認implicit因用得索引字段, 例如childLastName[], 她將作為被索引的字段使用同樣的索引到數組中,


The literal *這里指它包含當前測試字段的值,


作為例子,考慮一個(gè)包含通訊地址和郵箱字段的form。如果通訊地址不為空則郵箱字段是必須的required。你能這樣定義validwhen 規則:


<field property="emailAddress" depends="validwhen">


<arg0 key="userinfo.emailAddress.label"/>


<var>


<var-name>test</var-name>


<var-value>((sendNewsletter == null) or (*this* != null))</var-value>


</var>


</field>


上面定義的意思是:如果通訊地址是空或不空時(shí)這個(gè)字段時(shí)有效的。


這里有個(gè)稍微復雜的例子,它使用了索引字段。假定有一個(gè)表單,允許用戶(hù)輸入他們希望定購的部件號和數量。類(lèi)orderLine bean的一數組被用來(lái)在稱(chēng)為orderLines 的一屬性保持輸入項。


If you wished to verify that every line with part number also had a quantity entered, you could do it with:


如果你希望校驗訂單中有數量輸入得每一行,你可以這樣:


<field


property="quantity"


indexedListProperty="orderLines"


depends="validwhen">


<arg0 key="orderform.quantity.label"/>


<var>


<var-name>test</var-name>


<var-value>((orderLines[].partNumber == null) or (*this* != null))</var-value>


</var>


</field>


這里的意思是:如果相應的partNumber 字段是空, 或這字段是不空的,則這字段是有效的。


最后一個(gè)例子,想象一表單,用戶(hù)必須輸入他們的以英寸為單位的高度,如果他們在高度在60英寸以下,則出一錯誤。(it is an error to have checked off nbaPointGuard as a career.


<field property="nbaPointGuard" depends="validwhen">


<arg0 key="careers.nbaPointGuard.label"/>


<var>


<var-name>test</var-name>


<var-value>((heightInInches >= 60) or (*this* == null))</var-value>


</var>


</field>


 


給程序員的簡(jiǎn)單說(shuō)明:


所有的比較關(guān)系必須在parens 封裝。All comparisons must be enclosed in parens.


只有兩個(gè)itme時(shí)可以andor鏈接。


如果比較的兩item都可以轉為整數,則使用numeric比較,否則使用字符串比較。


可插入驗證器


驗證是從validation.xml 文件中加載的,默認的驗證規則定義在validation.xml 文件中,默認定義了required, mask ,byte, short, int, long, float, double, date (沒(méi)有本地支持), and a numeric range。


" mask "方式依賴(lài)于默認值安裝要求,那意味著(zhù)"required "可以完成,在"‘mask "將運行以前"required "" mask "方式被默認包含進(jìn)框架中了。任何字段如果不是"required "而且是空或有零長(cháng)度將跳過(guò)其他驗證。


如果使用了Javascript 標簽,客戶(hù)端javascriptvalidator‘s javascript 屬性中查找值而且產(chǎn)生一個(gè)有驗證form方法的對象,要得到更多的關(guān)于Javascript Validator 標簽工作細節的詳細的解釋,參閱html標簽API參考。


"‘mask‘ "方式讓你用一正則表達式掩碼驗證字段,它使用jakarta的正規表達式包,所有的有效性規則存儲在validator-rules.xml 文件,使用的主類(lèi)是org.apache.regexp.RE。


validation.xml文件中的驗證器配置范例:


<validator name="required"


classname="org.apache.struts.validator.FieldChecks"


method="validateRequired"


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">


<validator name="mask"


classname="org.apache.struts.validator.FieldChecks"


method="validateMask"


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.invalid">


 


定義可插入驗證器


方法的參數是用逗號分隔的一些類(lèi)名稱(chēng)列表,方法屬性需要有一個(gè)符合上面的列表的簽名。列表由以下組合而成:


java.lang.Object – 要驗證的Bean。


org.apache.commons.validator.ValidatorAction – 當前ValidatorAction。


org.apache.commons.validator.Field – 要驗證的字段


org.apache.struts.action.ActionErrors – 如果驗證錯誤將加入ActionError的錯誤對象javax.servlet.http.HttpServletRequest –當前request 對象。


javax.servlet.ServletContext – 應用的ServletContext。


org.apache.commons.validator.Validator–當前的org.apache.commons.validator.Validator實(shí)例。


java.util.Locale – 當前用戶(hù)的Locale。


多頁(yè)面form


字段部分有一可選的頁(yè)面屬性,它可以被設為整數,頁(yè)上字段的所有驗證小于或等于服務(wù)器端驗證的當前頁(yè),頁(yè)上字段的所有驗證小于或等于客戶(hù)端頁(yè)上所有字段的驗證小于或等于服務(wù)器端驗證的當前頁(yè)驗證的當前頁(yè)。一個(gè)mutli-part表單需要定義頁(yè)面屬性:


<html:hidden property="page" value="1"/>。


比較兩個(gè)字段


這是一個(gè)展示你怎樣才能比較兩個(gè)字段是否有一樣的值的例子。比如“用戶(hù)改變他們的口令“一般會(huì )有口令字段和一確認字段。


<validator name="twofields"


classname="com.mysite.StrutsValidator"


method="validateTwoFields"


msg="errors.twofields"/>


<field property="password" depends="required,twofields">


<arg0 key="typeForm.password.displayname"/>


<var>


<var-name>secondProperty</var-name>


<var-value>password2</var-value>


</var>


</field>


 


public static boolean validateTwoFields(


Object bean, ValidatorAction va, 


Field field, ActionErrors errors, HttpServletRequest request, 


ServletContext application) {


String value = ValidatorUtils.getValueAsString( bean, field.getProperty());


String sProperty2 = field.getVarValue("secondProperty");


String value2 = ValidatorUtils.getValueAsString( bean, sProperty2);


 


       if (!GenericValidator.isBlankOrNull(value)) {


try {


if (!value.equals(value2)) {


errors.add(field.getKey(),


Resources.getActionError( application, request, va, field));


                            return false;


}


} catch (Exception e) {


errors.add(field.getKey(), Resources.getActionError( application, request, va, field));


return false;


}


}


}


已知的bug


Struts Validator依賴(lài)于Commons Validator包,所以問(wèn)題報告和增強需求可能在兩個(gè)產(chǎn)品中列出。


·   Struts Validator Bugzilla Reports


·   Commons Validator Bugzilla Reports


變更和deprecations


新建的標記屬性。


<html:javascript>標記有新的屬性定義.


使用commons-validator.jar中的DTD驗證。


當前使用的驗證XML文件是根據commons-validator.jar中的DTD。Struts不在為validator-rules.xml and validator.xml.單獨維護一個(gè)分離的DTD,另外,commons-validator 現在維護一個(gè)統一的validator.dtd。修改所有validator.xml文件的DTD引用為


<!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">


空字段。


當前默認在所有得基礎驗證類(lèi)型中忽略空白的字段,如果你要求一個(gè)字段必須輸入,那末在你的應用的validator.xml 文件相應的字段定義的depends屬性中添加 " required "。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Struts源代碼閱讀(Commons-Validator) - [Matrix - 與 Java 共舞]
hk編寫(xiě)擴展Struts Validator校驗密碼輸入
Struts Validator 開(kāi)發(fā)指南
Validator驗證框架使用教程
Struts第4天
struts原理與實(shí)踐(6)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久