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

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

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

開(kāi)通VIP
用Struts Validator檢查你的表單
用Validator(驗證器)提供的豐富的內置驗證方法簡(jiǎn)化Struts的開(kāi)發(fā)過(guò)程。
Struts框架的一個(gè)主要好處是它提供了對接收到的表單數據進(jìn)行驗證的內置界面。如果有任何驗證失敗,則應用程序都會(huì )重新顯示HTML表單,這樣就可以改正無(wú)效的數據了。如果驗證成功,則處理過(guò)程會(huì )繼續進(jìn)行。Struts框架的簡(jiǎn)單驗證界面會(huì )減少與處理數據驗證有關(guān)的令人頭疼的事情,這樣你就可以把精力集中到驗證代碼上,而不是放到捕獲數據、重新顯示不完整或無(wú)效數據的技巧上。
但是,Struts內置的驗證界面也有缺點(diǎn)。例如,在整個(gè)應用程序中驗證代碼常常會(huì )大量重復,因為許多域需要相同的驗證邏輯。對一些相似字段的驗證邏輯進(jìn)行任何修改都要求在幾個(gè)地方修改代碼,還要重新編譯受影響的代碼。為了解決這個(gè)問(wèn)題并增強Struts驗證界面的功能,作為Struts的第三方附加件創(chuàng )建了Validator框架。后來(lái),Validator被集成到核心Struts代碼庫中,并從Struts中分離出來(lái),現在它是一個(gè)獨立的Jakarta Commons項目。雖然Validator是一個(gè)獨立的框架,但它仍能與其他程序封裝在一起后提供,并與Struts無(wú)縫集成。
Validator概述
沒(méi)有Validator,你就不得不編寫(xiě)驗證表單數據所需的全部代碼,并把它放入Form Bean對象的validate( )方法中。對于想在其上進(jìn)行數據驗證的每個(gè)Form Bean域來(lái)說(shuō),都需要編寫(xiě)邏輯代碼來(lái)實(shí)現驗證。此外,你還必須編寫(xiě)代碼來(lái)存儲驗證失敗時(shí)的出錯消息。
有了Validator,你就不必在Form Bean中編寫(xiě)用于驗證或存儲錯誤消息的任何代碼。相反,Form Bean提供了Validator的一個(gè)ActionForm子類(lèi),它提供驗證或存儲錯誤消息的功能。
可把Validator框架作為一個(gè)可用于Form Bean驗證的可插入的驗證例行程序系統來(lái)進(jìn)行安裝。每個(gè)驗證例行程序都只是一個(gè)Java方法,負責執行特定類(lèi)型的驗證任務(wù),驗證可能通過(guò),也可能失敗。 默認情況下,Validator與幾個(gè)有用的驗證例行程序封裝在一起來(lái)提供,這些例行程序能滿(mǎn)足大多數情況下的驗證要求。但是,如果Validator框架沒(méi)有提供你需要的驗證例行程序,那么你可以自己創(chuàng )建定制的驗證例行程序,并將它插入到該框架中。此外,Validator還支持服務(wù)器端和客戶(hù)端(JavaScript)的驗證,而Form Bean只提供服務(wù)器端驗證界面。
Validator使用兩個(gè)XML配置文件來(lái)分別確定安裝哪個(gè)驗證例行程序和如何將它們應用于給定的應用程序。第一個(gè)配置文件validator-rules.xml說(shuō)明應該被插入到框架中的驗證例行程序,并提供每個(gè)驗證的邏輯的名稱(chēng)。validator-rules.xml文件還定義了每個(gè)驗證例行程序的客戶(hù)端JavaScript代碼??梢耘渲肰alidator讓它把這個(gè)JavaScript代碼發(fā)送到瀏覽器上,這樣驗證就可以在客戶(hù)端和服務(wù)器端進(jìn)行了。
第二個(gè)配置文件validation.xml確定哪個(gè)驗證例行程序應用到哪個(gè)Form Bean。文件中的定義使用struts-config.xml文件給出的Form Bean的邏輯名稱(chēng)以及validator-rules.xml文件給出的驗證例行程序的邏輯名稱(chēng),以便把二者關(guān)聯(lián)起來(lái)。
使用Validator框架包括啟用Validator插件、配置Validator的兩個(gè)配置文件,以及創(chuàng )建提供Validator的ActionForm子類(lèi)的Form Beans。下面詳細解釋如何配置和使用Validator。
啟用Validator插件
雖然Validator框架是與Struts封裝在一起提供的,但在默認狀況下Validator并不被啟用。為了啟用Validator,要向你的應用程序的struts-config.xml文件中添加下面的插件定義。
<!-- Validator Configuration --> <plug-in className="org.apache.struts .validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/ validator-rules.xml, /WEB-INF/ validation.xml"/> </plug-in>
 
該定義告訴Struts為你的應用程序加載并初始化Validator插件。在初始化時(shí),該插件裝入由路徑名屬性指定的、用逗號分隔的Validator配置文件清單。每個(gè)配置文件的路徑應該用與Web應用程序的相關(guān)的路徑來(lái)指定,如前面的例子所示。
請注意,你的應用程序的struts-config.xml文件必須與Struts Configuration Document Type Definition(Struts配置文檔類(lèi)型定義,DTD)一致,后者規定文件中元素出現的順序。所以,你必須把Validator插件定義放到該文件的適當位置。確保文件中元素適當排列的最簡(jiǎn)便方法就是使用諸如Struts Console的工具,它自動(dòng)格式化你的配置文件,以便與DTD保持一致。
配置validator-rules.xml
Validator框架可以設置為可插入系統,其驗證例行程序僅僅是插入到該系統中執行具體驗證的Java方法。validator-rules.xml文件說(shuō)明性地插入Validator用于執行驗證的驗證例行程序中。Struts示例應用程序帶有這個(gè)文件的預配置拷貝。在大多數情況下,你不必修改這個(gè)預配置拷貝,除非你要向該框架中添加自己定制的驗證。
清單1 是一個(gè)示例validator-rules.xml文件,說(shuō)明如何將驗證例行程序插入到Validator中。validator-rules.xml文件中的每個(gè)驗證例行程序都有自己的定義,它用validator標記聲明,利用name屬性為該驗證例行程序指定邏輯名,并指定該例行程序的類(lèi)和方法。該例行程序的邏輯名稱(chēng)供該文件中的其他例行程序以及validation.xml文件中的驗證定義用于引用該例行程序。
請注意,validator標記放在javascript的標記中,javascript標記用于定義客戶(hù)端JavaScript代碼,以便在客戶(hù)端執行與服務(wù)器端相同的驗證。
提供的驗證程序
默認情況下,Validator中包括幾個(gè)基本驗證例行程序,你可以用它們來(lái)處理大多數驗證問(wèn)題。這些例行程序具有邏輯名稱(chēng),如required(用于輸入要求的值)、CreditCard(用于輸入信用卡號碼值)、email(用于輸入電子郵件地址值),等等。
創(chuàng )建Form Bean
為了使用Validator,你的應用程序的Form Bean必須歸到Validator的ActionForm的某一子類(lèi),而不是ActionForm本身。Validator的ActionForm子類(lèi)提供了ActionForm的validate( )方法(它嵌入到Validator框架中)的實(shí)施過(guò)程。你不必從頭編寫(xiě)驗證代碼并把它投入validate( )方法中,相反,可以完全忽略該方法,因為Validator為你提供了驗證代碼。
與Struts提供的核心功能相類(lèi)似,Validator提供給你兩種可供選擇的方法來(lái)創(chuàng )建Form Bean。 你可以選擇的第一種方法就是像下面這樣創(chuàng )建一個(gè)特定的Form Bean對象:
package com.jamesholmes.minihr; import org.apache.struts.validator .ValidatorForm; public class LogonForm extends ValidatorForm { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
 
這個(gè)類(lèi)與你不是用Validator所創(chuàng )建的類(lèi)相似,但它提供ValidatorForm而不是ActionForm。這個(gè)類(lèi)也不提供ActionForm的空reset( )和validate( )方法的實(shí)施過(guò)程,因為ValidatorForm提供了相應過(guò)程。
在struts-config.xml文件中配置這個(gè)特定Form Bean的方法與配置正則Form Bean的方法相同:
<form-beans> <form-bean name="logonForm" type="com.jamesholmes .minihr.LogonForm"/> </form-beans>
 
用表單標記的name屬性給特定Form Bean指定的邏輯名是在定義validation.xml文件中的驗證時(shí)所使用的名稱(chēng),如下所示:
<!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> <formset> <form name="logonForm"> <field property="username" depends="required"> <arg0 key="prompt.username"/> </field> </form> </formset> </form-validation>
 
Validator使用該表單標記的name屬性的值將驗證定義與要應用這些定義的Form Bean的名稱(chēng)相匹配。
創(chuàng )建Form Bean時(shí)可以選擇的第二種方法是在struts-config.xml文件中定義一個(gè)動(dòng)態(tài)Form Bean,如下所示:
<form-beans> <form-bean name="logonForm" type="org.apache .struts.validator.DynaValidatorForm"> <form-property name="username" type="java.lang.String"/> <form-property name="password" type="java.lang.String"/> </form-bean> </form-beans>
 
動(dòng)態(tài)Form Bean不要求創(chuàng )建特定的Form Bean對象;相反,要定義Form Bean應該具有的屬性和類(lèi)型,而Struts為你動(dòng)態(tài)創(chuàng )建Form Bean。 Validator允許你使用這個(gè)概念,就像在核心Struts中使用這個(gè)概念一樣。與使用Validator的惟一區別就是要指定Form Bean是org.apache.struts.validator.DynaValidatorForm類(lèi)型,而不是org.apache.struts.action.DynaActionForm類(lèi)型。
分配給動(dòng)態(tài)Form Bean的邏輯名是在定義validation.xml文件中的驗證時(shí)使用的名稱(chēng)。Validator使用與之相匹配的名稱(chēng)將這些驗證與Form Bean聯(lián)系在一起。
除了創(chuàng )建Form Bean的這兩種標準方法之外,Validator還提供了一個(gè)高級特性,用于將多個(gè)驗證定義與一個(gè)Form Bean定義聯(lián)系起來(lái)。當你使用基于validatorForm或基于DynaValidatorForm的Form Bean時(shí),Validator使用struts-config.xml文件中的Form Bean的邏輯名稱(chēng),將Form Bean映射到validation.xml文件中的驗證定義。這種機制在大多數情況下非常有用,但在某些時(shí)候,Form Bean要在多個(gè)操作中共享。 一個(gè)操作可能使用Form Bean的所有域(fields),而另一個(gè)操作可能只使用這些域的一個(gè)子集。因為驗證定義被連接到Form Bean,所以只使用域的一個(gè)子集的操作就無(wú)法繞過(guò)對未使用域的驗證。當驗證Form Bean時(shí),就會(huì )對未使用的域生成錯誤消息,因為Validator無(wú)從知道不去驗證未使用的域,它只是簡(jiǎn)單地把它們看作缺失或無(wú)效。
為了解決這個(gè)問(wèn)題,Validator提供了兩個(gè)附加的ActionForm子類(lèi),它使你能夠將驗證與操作相關(guān)聯(lián),而不是與Form Bean相關(guān)聯(lián)。這樣你就可以根據哪個(gè)操作正在使用Form Bean來(lái)指定把哪些驗證用于該Form Bean了。對于特定的Form Bean,你要像下面這樣聲明org.apache.struts.validator.ValidatorActionForm子類(lèi):
public class AddressForm extends ValidatorActionForm { ... }
 
對于動(dòng)態(tài)Form Bean,在struts-config.xml文件中為Form Bean定義指定org.apache.struts.validator.DynaValidatorActionForm的類(lèi)型,如下所示:
<form-bean name="addressForm" type="org.apache.struts .validator.DynaValidatorActionForm"> ... </form-bean>
 
在validation.xml文件中,把一組驗證映射到一個(gè)操作路徑,而不是映射到Form Bean名,因為如果你定義了Create Address和Edit Address兩個(gè)操作(它們使用同一個(gè)Form Bean),那么每個(gè)操作都會(huì )有一個(gè)惟一的操作名,如下所示:
<action-mappings> <action path="/createAddress" type="com.jamesholmes .minihr.CreateAddressAction" name="addressForm"/> <action path="/editAddress" type="com.jamesholmes .minihr.EditAddressAction" name="addressForm"/> </action-mappings>
 
下面的validation.xml文件片斷顯示了兩組驗證,它們用于同一個(gè)Form Bean,但卻有不同的操作路徑:
<formset> <form name="/createAddress"> <field property="city" depends="required"> <arg0 key="prompt.city"/> </field> </form> <form name="/editAddress"> <field property="state" depends="required"> <arg0 key="prompt.state"/> </field> </form> </formset>
 
因為Form Bean要么屬于ValidatorActionForm子類(lèi),要么屬于DynaValidatorActionForm子類(lèi),所以Validator知道用一個(gè)操作路徑代替Form Bean的邏輯名稱(chēng)來(lái)找出用于Form Bean的驗證。
配置validation.xml文件
validation.xml文件用于聲明將應用到Form Beans的一組驗證。要驗證的每個(gè)Form Bean在這個(gè)文件中都有自己的定義。在這個(gè)定義中,指定要應用到該Form Bean的各域的驗證。下面是一個(gè)validation.xml文件的例子,說(shuō)明如何定義驗證:
<!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> <formset> <form name="logonForm"> <field property="username" depends="required"> <arg0 key="prompt.username"/> </field> <field property="password" depends="required"> <arg0 key="prompt.password"/> </field> </form> </formset> </form-validation>
 
validation.xml文件的第一個(gè)元素是form-validation。這個(gè)元素是該文件的主元素,而且只定義一次。在form-validation元素內定義form-set元素,它包括多個(gè)表單元素。一般來(lái)說(shuō),在文件中只定義一個(gè)form-set元素,但是如果要將驗證國際化,那就要在每個(gè)地方單獨使用一個(gè)form-set元素。
每個(gè)表單元素使用name屬性將名稱(chēng)與其所包含的域驗證集關(guān)聯(lián)起來(lái)。Validator使用這個(gè)邏輯名稱(chēng)將這些驗證映射到在struts-config.xml文件中定義的一個(gè)Form Bean。根據要驗證的Form Bean的類(lèi)型,Validator力求將該名稱(chēng)與Form Bean的邏輯名稱(chēng)或操作路徑相匹配。在表單元素內,field元素定義要應用到Form Bean的特定域的驗證。field元素的property屬性對應于特定Form Bean中的域名。depends屬性利用validator-rules.xml文件指定驗證例行程序的邏輯名稱(chēng),這些例行程序將應用到域驗證中。
配置ApplicationResources.properties
Validator使用Struts的資源綁定(Resource Bundle)機制將錯誤消息具體化。不用在框架中對錯誤消息進(jìn)行硬編碼,Validator使你能在A(yíng)pplicationResources.properties文件中為一個(gè)消息指定一個(gè)鍵值,如果驗證失敗則將返回該鍵值。validator-rules.xml文件中的每個(gè)驗證例行程序都用validator標記的msg屬性指定錯誤消息的鍵值,如下所示:
<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">
 
如果在驗證例行程序運行時(shí)驗證失敗,則返回與msg屬性指定的鍵值對應的消息。
下面的片段顯示來(lái)自ApplicationResources.properties文件的驗證出錯時(shí)的默認消息集,它們由Struts示例應用程序提供。每個(gè)消息的鍵值對應于每個(gè)由validator-rules.xml文件中的驗證例行程序所指定的消息,它們由Struts示例應用程序提供。
# Error messages for Validator framework validations errors.required={0} is required. errors.minlength={0} cannot be less than {1} characters. errors.maxlength={0} cannot be greater than {2} 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.0. 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 not a valid credit card number. errors.email={0} is an invalid e-mail address.
 
請注意,每條消息都有占位符,形式為{0}、{1}或{2}。在運行期間,占位符被另一個(gè)值代替,如所驗證的域的名稱(chēng)。這一特性特別有用,它使你能夠創(chuàng )建可被幾個(gè)不同的域重復使用的通用驗證錯誤消息。
例如,下面給出required驗證的錯誤消息errors.required:
errors.required={0} is required.
 
當你使用validation.xml文件中的該required驗證時(shí),必須定義用于替換該錯誤消息中的{0}的值,如下所示:
<form name="auctionForm"> <field property="bid" depends="required"> <arg0 key="prompt.bid"/> </field> </form>
 
錯誤消息最多可以有4個(gè)占位符:{0}和{3}。這些占位符分別稱(chēng)為arg0到arg3,你可以通過(guò)使用arg0~arg3標記來(lái)指定它們。在上面的例子中,arg0標記指定了用于替換{0}占位符的值。該標記的key屬性指定來(lái)自ApplicationResources.properties文件的一個(gè)消息鍵值,它的值用于替換占位符,如下所示:
 
閱讀
關(guān)于Validator的更多文章
jakarta.apache.org/commons/validator
關(guān)于Struts Console的更多文章
www.jamesholmes.com/struts
prompt.bid=Auction Bid
 
使用消息鍵值代替占位符的值,這一方法使你不必在validation.xml文件中對替換值反復硬編碼。但是,如果你不想使用Resource Bundle的鍵值/值機制來(lái)指定占位符的值,則可以使用arg0標記的如下語(yǔ)法顯式地指定占位符的值:
<arg0 key="Auction Bid" resource="false"/>
 
在這個(gè)例子中,resource屬性的值設為false,以便通知Validator要把該key屬性指定的值作為占位符的值,而不要作為ApplicationResources.properties文件中消息的一個(gè)鍵值。
啟用客戶(hù)端驗證
Validator除了提供了簡(jiǎn)化服務(wù)器端表單數據驗證過(guò)程的框架外,它還提供了執行客戶(hù)端驗證時(shí)易于使用的方法。在validator-rules.xml文件中定義的每一個(gè)驗證例行程序都可以隨意指定JavaScript代碼,這些代碼可以在瀏覽器(客戶(hù)端上的)中運行,從而執行與服務(wù)器端進(jìn)行的驗證相同的驗證過(guò)程。在客戶(hù)端進(jìn)行驗證時(shí),除非所有表單都通過(guò)驗證,否則這些表單不允許被提交。
為了啟用客戶(hù)端驗證,必須在每個(gè)需要驗證的JSP中放上Struts HTML Tag Library(標記庫)的javascript標記,如下所示:
<html:javascript formName="logonForm"/>
 
javascript標記要求使用formName屬性來(lái)為想要對其執行驗證的表單指定validation.xml文件中給出的表單定義名,如下所示:
<form name="logonForm"> <field property="username" depends="required"> <arg0 key="prompt.username"/> </field> <field property="password" depends="required"> <arg0 key="prompt.password"/> </field> </form>
 
為表單定義指定的服務(wù)器端的所有驗證都將在客戶(hù)端運行。由于客戶(hù)端驗證用JavaScript執行,所以可以有多種方法不去執行它。要確保驗證過(guò)程總是能運行,不論你是否選擇啟用了客戶(hù)端驗證,Validator都在服務(wù)器端執行這些驗證。
結論
Validator框架針對表單數據的驗證提供了可配置的系統,從而為核心Struts框架添加了很多有價(jià)值的功能。通過(guò)把Validator框架用于你的應用程序,你可以節約時(shí)間并簡(jiǎn)化Struts應用程序的開(kāi)發(fā)過(guò)程。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Struts第4天
Struts Validator 開(kāi)發(fā)指南
在JSF中使用Shale進(jìn)行客戶(hù)端驗證
hk編寫(xiě)擴展Struts Validator校驗密碼輸入
Struts的驗證--Validator
Validator驗證框架使用教程
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

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