![第五講數(shù)據(jù)校驗(yàn)_第1頁(yè)](http://file4.renrendoc.com/view/7f54509cbb0f57e12b6b69dfbc41ca91/7f54509cbb0f57e12b6b69dfbc41ca911.gif)
![第五講數(shù)據(jù)校驗(yàn)_第2頁(yè)](http://file4.renrendoc.com/view/7f54509cbb0f57e12b6b69dfbc41ca91/7f54509cbb0f57e12b6b69dfbc41ca912.gif)
![第五講數(shù)據(jù)校驗(yàn)_第3頁(yè)](http://file4.renrendoc.com/view/7f54509cbb0f57e12b6b69dfbc41ca91/7f54509cbb0f57e12b6b69dfbc41ca913.gif)
![第五講數(shù)據(jù)校驗(yàn)_第4頁(yè)](http://file4.renrendoc.com/view/7f54509cbb0f57e12b6b69dfbc41ca91/7f54509cbb0f57e12b6b69dfbc41ca914.gif)
![第五講數(shù)據(jù)校驗(yàn)_第5頁(yè)](http://file4.renrendoc.com/view/7f54509cbb0f57e12b6b69dfbc41ca91/7f54509cbb0f57e12b6b69dfbc41ca915.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第五講數(shù)據(jù)校驗(yàn)第一頁(yè),共五十一頁(yè),編輯于2023年,星期一本次課的主要內(nèi)容輸入校驗(yàn)342.第二頁(yè),共五十一頁(yè),編輯于2023年,星期一本章主要內(nèi)容簡(jiǎn)介用validate方法進(jìn)行輸入校驗(yàn)validate()方法輸入校驗(yàn)、validateXxx()方法輸入校驗(yàn)基于框架的輸入校驗(yàn)使用字段校驗(yàn)的輸入校驗(yàn)、使用非字段校驗(yàn)的輸入校驗(yàn)第三頁(yè),共五十一頁(yè),編輯于2023年,星期一簡(jiǎn)介Web技術(shù)的發(fā)展給用戶帶來(lái)了方便,使用瀏覽器就可以完成某些工作。在方便使用的同時(shí),也將系統(tǒng)輸入界面暴露給用戶,面臨大量惡意破壞性輸入的考驗(yàn)。例如金額的輸入框中輸入字母漢字,日期的輸入框輸入不正確的格式或不可能存在的日期等。這些都需要我們通過(guò)輸入校驗(yàn)來(lái)解決。輸入校驗(yàn)直接影響了系統(tǒng)的抗破壞性能和穩(wěn)定性。實(shí)際上,輸入校驗(yàn)往往同類型轉(zhuǎn)換聯(lián)系在一起,都是對(duì)用戶輸入數(shù)據(jù)的規(guī)范化檢查和處理,我們可以通過(guò)JavaScript來(lái)實(shí)現(xiàn)客戶端校驗(yàn),但一般都只是完成初步的檢查和過(guò)濾,但對(duì)于需要與服務(wù)器交互的邏輯性校驗(yàn)就無(wú)能為力了,雖然提高了相應(yīng)速度,但是功能有很大局限性,代碼維護(hù)性也不好。我們不來(lái)講解JavaScript的客戶端校驗(yàn),只是來(lái)看看Struts2為我們提供的輸入校驗(yàn)方法。第四頁(yè),共五十一頁(yè),編輯于2023年,星期一Struts2輸入校驗(yàn)輸入校驗(yàn)分為客戶端校驗(yàn)和服務(wù)器端校驗(yàn)??蛻舳诵r?yàn)可以過(guò)濾掉用戶的錯(cuò)誤操作,是第一道防線,一般使用JavaScript代碼實(shí)現(xiàn)。僅有客戶端驗(yàn)證還是不夠的。攻擊者還可以繞過(guò)客戶端校驗(yàn)直接進(jìn)行非法輸入,這樣可能會(huì)引起系統(tǒng)的異常,所以必須加上服務(wù)器端的驗(yàn)證。但僅有服務(wù)器端驗(yàn)證也是不行的,客戶的錯(cuò)誤操作總是提交到服務(wù)器,由服務(wù)器端進(jìn)行驗(yàn)證返回錯(cuò)誤信息,這樣會(huì)加重服務(wù)器的負(fù)擔(dān)。所以客戶端驗(yàn)證和服務(wù)器端驗(yàn)證缺一不可,兩者結(jié)合起來(lái)才可以構(gòu)建健壯的系統(tǒng)。第五頁(yè),共五十一頁(yè),編輯于2023年,星期一什么是輸入校驗(yàn)輸入校驗(yàn),從字面上來(lái)看好像是指對(duì)如輸入的密碼或者用戶名輸入錯(cuò)誤的校驗(yàn)。其實(shí)這個(gè)不算輸入校驗(yàn),這個(gè)算是業(yè)務(wù)邏輯的判斷了。輸入校驗(yàn)是對(duì)輸入的用戶名長(zhǎng)度、密碼長(zhǎng)度、年齡信息等的判斷。為了給大家一個(gè)感官上的認(rèn)識(shí),現(xiàn)在打開(kāi)163郵箱的注冊(cè)頁(yè)面,如圖所示。第六頁(yè),共五十一頁(yè),編輯于2023年,星期一為什么要進(jìn)行輸入校驗(yàn)?zāi)菫槭裁匆M(jìn)行輸入校驗(yàn)?zāi)??使用它有什么好處呢?為了更好地說(shuō)明,來(lái)看下面這個(gè)注冊(cè)頁(yè)面,如圖所示。現(xiàn)在按常規(guī)輸入用戶注冊(cè)信息,單擊“注冊(cè)”按鈕進(jìn)行注冊(cè)。頁(yè)面跳轉(zhuǎn)到注冊(cè)信息顯示頁(yè),如圖所示。第七頁(yè),共五十一頁(yè),編輯于2023年,星期一輸入校驗(yàn)Struts2的輸入校驗(yàn)步驟對(duì)請(qǐng)求參數(shù)執(zhí)行類型轉(zhuǎn)換轉(zhuǎn)換是否出錯(cuò)將錯(cuò)誤提示保存到ActionContext內(nèi)建驗(yàn)證器進(jìn)行驗(yàn)證conversionError負(fù)責(zé)將其轉(zhuǎn)換成fieldError執(zhí)行validateXxx()方法執(zhí)行validate()方法包含fieldError嗎調(diào)用Action的處理方法呈現(xiàn)視圖資源是否是,跳過(guò)Action處理邏輯,返回input視圖否第八頁(yè),共五十一頁(yè),編輯于2023年,星期一輸入校驗(yàn)手動(dòng)完成輸入校驗(yàn)重寫validate()方法繼承ActionSupport類,重寫validate()方法實(shí)例:OverrideValidate重寫validateXxx()方法對(duì)于多個(gè)處理邏輯的校驗(yàn),會(huì)有多個(gè)validateXxx()方法,重寫這多個(gè)方法,可以實(shí)現(xiàn)對(duì)不同處理邏輯的獨(dú)立校驗(yàn)處理。實(shí)例:ValidateXxx第九頁(yè),共五十一頁(yè),編輯于2023年,星期一
手工編寫代碼實(shí)現(xiàn)輸入校驗(yàn)通過(guò)重寫validate()或validateXxx()方法實(shí)現(xiàn),validate()方法會(huì)校驗(yàn)action中所有與execute方法簽名相同的方法。validateXxx()只會(huì)校驗(yàn)action中方法名為Xxx的方法。其中Xxx的第一個(gè)字母要大寫。當(dāng)某個(gè)數(shù)據(jù)校驗(yàn)失敗時(shí),我們應(yīng)該調(diào)用addFieldError()方法往系統(tǒng)的fieldErrors添加校驗(yàn)失敗信息(為了使用addFieldError()方法,action可以繼承ActionSupport),如果系統(tǒng)的fieldErrors包含失敗信息,struts2會(huì)將請(qǐng)求轉(zhuǎn)發(fā)到名為input的result。在input視圖中可以通過(guò)<s:fielderror/>顯示失敗信息。validate()使用例子:@Overridepublicvoidvalidate(){if(username==null&&"".equals(username.trim()))this.addFieldError("username","用戶名不能為空");}validateXxx()方法使用例子:publicStringadd()throwsException{ return"success";} publicvoidvalidateAdd(){if(username==null&&"".equals(username.trim()))this.addFieldError("username","用戶名不能為空");}驗(yàn)證失敗后,請(qǐng)求轉(zhuǎn)發(fā)至input視圖:<resultname="input">/WEB-INF/page/addUser.jsp</result>在addUser.jsp頁(yè)面中使用<s:fielderror/>顯示失敗信息。第十頁(yè),共五十一頁(yè),編輯于2023年,星期一
輸入校驗(yàn)的流程1。類型轉(zhuǎn)換器對(duì)請(qǐng)求參數(shù)執(zhí)行類型轉(zhuǎn)換,并把轉(zhuǎn)換后的值賦給action中的屬性。2。如果在執(zhí)行類型轉(zhuǎn)換的過(guò)程中出現(xiàn)異常,系統(tǒng)會(huì)將異常信息保存到ActionContext,conversionError攔截器將異常信息封裝到fieldErrors里,然后執(zhí)行第3步。如果類型轉(zhuǎn)換沒(méi)有出現(xiàn)異常,則直接進(jìn)入第3步。3。系統(tǒng)通過(guò)反射技術(shù)調(diào)用action中的validateXxx()方法,Xxx為方法名。4。調(diào)用action中的validate()方法。5。經(jīng)過(guò)上面4步,如果系統(tǒng)中的fieldErrors存在錯(cuò)誤信息(即存放錯(cuò)誤信息的集合的size大于0),系統(tǒng)自動(dòng)將請(qǐng)求轉(zhuǎn)發(fā)至名稱為input的視圖。如果系統(tǒng)中的fieldErrors沒(méi)有任何錯(cuò)誤信息,系統(tǒng)將執(zhí)行action中的處理方法。第十一頁(yè),共五十一頁(yè),編輯于2023年,星期一用validate方法進(jìn)行輸入校驗(yàn)1validate()方法輸入校驗(yàn)我們先來(lái)學(xué)習(xí)validate()方法進(jìn)行校驗(yàn)。創(chuàng)建“com.ntc.sample.sshvalidate”的package包。并在其下邊建立ValidateAction類,關(guān)鍵代碼如下所示。校驗(yàn)邏輯如代碼注釋,對(duì)于用戶名,必須輸入,對(duì)于密碼必須長(zhǎng)度在6-10。注意:使用validate()方法必須繼承ActionSupport類第十二頁(yè),共五十一頁(yè),編輯于2023年,星期一用validate方法進(jìn)行輸入校驗(yàn)validate()方法輸入校驗(yàn)接著創(chuàng)建validate.jsp,用來(lái)輸入用戶名和密碼。代碼如下所示,第十三頁(yè),共五十一頁(yè),編輯于2023年,星期一
用validate方法進(jìn)行輸入校驗(yàn).1validate()方法輸入校驗(yàn)然后創(chuàng)建校驗(yàn)成功后的頁(yè)面detail.jsp,代碼如下所示。第十四頁(yè),共五十一頁(yè),編輯于2023年,星期一
用validate方法進(jìn)行輸入校驗(yàn).1validate()方法輸入校驗(yàn)在src目錄下建立配置文件struts.xml,如下所示。第十五頁(yè),共五十一頁(yè),編輯于2023年,星期一
用validate方法進(jìn)行輸入校驗(yàn).1validate()方法輸入校驗(yàn)初始化的頁(yè)面如下圖所示。第十六頁(yè),共五十一頁(yè),編輯于2023年,星期一
用validate方法進(jìn)行輸入校驗(yàn).1validate()方法輸入校驗(yàn)點(diǎn)擊確認(rèn)后,我們的校驗(yàn)執(zhí)行了,這里,每個(gè)輸入域都會(huì)出現(xiàn)對(duì)應(yīng)的錯(cuò)誤信息,效果圖如下。第十七頁(yè),共五十一頁(yè),編輯于2023年,星期一
用validate方法進(jìn)行輸入校驗(yàn).1validate()方法輸入校驗(yàn)當(dāng)我們輸入符合條件的數(shù)據(jù)但不是admin和password時(shí),例如輸入admi和1234567時(shí),返回輸入頁(yè)面但是沒(méi)有出錯(cuò)信息,說(shuō)明校驗(yàn)是正常通過(guò)的只是邏輯不正確。第十八頁(yè),共五十一頁(yè),編輯于2023年,星期一
用validate方法進(jìn)行輸入校驗(yàn).1validate()方法輸入校驗(yàn)我們?cè)賮?lái)輸入admin和password,將遷移到detail.jsp,表示校驗(yàn)正常,邏輯也正確。第十九頁(yè),共五十一頁(yè),編輯于2023年,星期一
用validate方法進(jìn)行輸入校驗(yàn).1validate()方法輸入校驗(yàn)我們還可以在validate.jsp中加入如下代碼,這樣可以把所有的異常信息顯示出來(lái)。我們把它放在了</body>上邊,出錯(cuò)的時(shí)候,錯(cuò)誤信息除了在每個(gè)輸入框處顯示外,在頁(yè)面最下端也會(huì)把所有的錯(cuò)誤顯示出來(lái)。
效果圖。第二十頁(yè),共五十一頁(yè),編輯于2023年,星期一
用validate方法進(jìn)行輸入校驗(yàn).2validateXxx()方法輸入校驗(yàn)對(duì)于使用validate()方法校驗(yàn),我們?cè)贏ction中所有的處理方法都會(huì)進(jìn)行數(shù)據(jù)校驗(yàn),可以把所有要驗(yàn)證的邏輯代碼都寫入其中,但是卻不利于維護(hù),而validateXXX可以將某邏輯的校驗(yàn)代碼從validate分離出來(lái)。validateXxx()方法則是對(duì)不同的業(yè)務(wù)方法進(jìn)行數(shù)據(jù)校驗(yàn)。例如,我們有一個(gè)login()方法,我們使用validateLogin()方法來(lái)處理數(shù)據(jù)輸入校驗(yàn)。我們來(lái)看一個(gè)例子里面的ValidateXxxAction類,里邊定義一個(gè)login方法,并建立validateLogin方法注意:由于validate()方法對(duì)Action類中所有方法進(jìn)行校驗(yàn),所以,在使用validateXxx()方式時(shí),最好去掉validate()方法的代碼,或者檢查兩者不需要重復(fù)校驗(yàn)。第二十一頁(yè),共五十一頁(yè),編輯于2023年,星期一
用validate方法進(jìn)行輸入校驗(yàn).2validateXxx()方法輸入校驗(yàn)以下是校驗(yàn)類的校驗(yàn)方法的主要代碼。注意:使用validateXxx()方法必須繼承ActionSupport類第二十二頁(yè),共五十一頁(yè),編輯于2023年,星期一
用validate方法進(jìn)行輸入校驗(yàn).2validateXxx()方法輸入校驗(yàn)我們?cè)賮?lái)看validatexxx.jsp,只是form的action改成了validatexxx,其他的也沒(méi)有變化,主要代碼如下。第二十三頁(yè),共五十一頁(yè),編輯于2023年,星期一
用validate方法進(jìn)行輸入校驗(yàn).2validateXxx()方法輸入校驗(yàn)Struts.xml關(guān)鍵代碼如下。第二十四頁(yè),共五十一頁(yè),編輯于2023年,星期一當(dāng)validate()和validateXXX都存在時(shí)validateXXX方法校驗(yàn)得到的錯(cuò)誤信息先顯示出來(lái),然后才是validate方法校驗(yàn)的字段錯(cuò)誤信息validate方法在validateXXX方法被調(diào)用后,依然會(huì)被調(diào)用錯(cuò)誤信息均保留在ArrayList中,誰(shuí)先運(yùn)行,誰(shuí)的結(jié)果就排在前面第二十五頁(yè),共五十一頁(yè),編輯于2023年,星期一Struts的輸入校驗(yàn)流程客戶端提交數(shù)據(jù)后,Struts2進(jìn)行類型轉(zhuǎn)換類型轉(zhuǎn)換成功后,調(diào)用validateXXX方法調(diào)用完validateXXX方法后,繼續(xù)調(diào)用validate方法如果沒(méi)有字段錯(cuò)誤,則調(diào)用Action處理方法;有錯(cuò)誤,則返回inputAction處理結(jié)束后,返回結(jié)果,轉(zhuǎn)入相應(yīng)的web頁(yè)第二十六頁(yè),共五十一頁(yè),編輯于2023年,星期一
基于框架的輸入校驗(yàn)我們上節(jié)用validate()和validateXxx()方法進(jìn)行了校驗(yàn),這種方式的校驗(yàn)的弊端就是寫在了Action實(shí)現(xiàn)類中,使Action變得復(fù)雜臃腫,同時(shí)提高了Action同輸入校驗(yàn)之間的耦合度。Struts2框架提供了一種基于框架文件的輸入校驗(yàn)方式,將校驗(yàn)規(guī)則保存在特定的框架文件中,這樣,輸入校驗(yàn)和Action實(shí)現(xiàn)了分離,提高了系統(tǒng)的維護(hù)性?;诳蚣艿男r?yàn)有兩種編寫校驗(yàn)規(guī)則文件的寫法,一種是使用字段校驗(yàn)的寫法,一種是使用非字段校驗(yàn)的寫法。第二十七頁(yè),共五十一頁(yè),編輯于2023年,星期一輸入校驗(yàn)編寫校驗(yàn)規(guī)則文件Struts2提供了基于驗(yàn)證框架的輸入校驗(yàn),只需編寫簡(jiǎn)單的配置文件,Struts2的驗(yàn)證框架將會(huì)負(fù)責(zé)進(jìn)行服務(wù)器校驗(yàn)和客戶校驗(yàn)??梢岳门渲梦募?,實(shí)現(xiàn)校驗(yàn)信息的國(guó)際化提示實(shí)例:ValidateDemo使用客戶端校驗(yàn)將輸入頁(yè)面的表單元素改為使用struts2標(biāo)簽實(shí)現(xiàn)為<s:form…/>元素增加validate=“true”屬性將頁(yè)面移動(dòng)到WEB-INF/content目錄下,使核心filter起作用。實(shí)例:ClientValidate第二十八頁(yè),共五十一頁(yè),編輯于2023年,星期一應(yīng)用Struts2校驗(yàn)框架(1)校驗(yàn)框架以聲明的方式來(lái)實(shí)現(xiàn)輸入校驗(yàn),將檢驗(yàn)代碼從Action代碼中轉(zhuǎn)移到XML配置文件中,從而可以實(shí)現(xiàn)Action代碼的簡(jiǎn)化。Struts2將一些常用的校驗(yàn)功能進(jìn)行了封裝,以校驗(yàn)器形式存在,當(dāng)需要實(shí)現(xiàn)校驗(yàn)功能的時(shí)候,只需在XML配置文件中進(jìn)行配置即可。第二十九頁(yè),共五十一頁(yè),編輯于2023年,星期一Validation框架校驗(yàn)在配置文件中配置需要校驗(yàn)的字段和校驗(yàn)規(guī)則,即可以對(duì)相應(yīng)的字段進(jìn)行校驗(yàn)配置文件命名為xxxx-validation.xml第三十頁(yè),共五十一頁(yè),編輯于2023年,星期一validation框架校驗(yàn)的DTD<!DOCTYPEvalidatorsPUBLIC"-//OpenSymphonyGroup//XWorkValidator1.0.2//EN""/xwork/xwork-validator-1.0.2.dtd">直接拷貝即可第三十一頁(yè),共五十一頁(yè),編輯于2023年,星期一validators、field、field-validatorvalidators將需進(jìn)行校驗(yàn)的所有內(nèi)容進(jìn)行封裝field標(biāo)簽封裝某特定字段field-validator表明校驗(yàn)類型,只校驗(yàn)field字段第三十二頁(yè),共五十一頁(yè),編輯于2023年,星期一
基于框架的輸入校驗(yàn).1使用字段校驗(yàn)的輸入校驗(yàn)ValidateByFieldXmlAction-validation.xml的關(guān)鍵代碼如下:type指定校驗(yàn)類型,常用校驗(yàn)類型如下:required:必填字段校驗(yàn)requiredstring:非空String檢查int:Int類型范圍校驗(yàn)double:Double類型范圍校驗(yàn)date:日期校驗(yàn)Expression:使用OGNL表達(dá)式的校驗(yàn)fieldexpression:針對(duì)一個(gè)字段使用OGNL表達(dá)式的校驗(yàn)email:Email校驗(yàn)URL校驗(yàn)regex:正則表達(dá)式校驗(yàn)stringlength:字符產(chǎn)長(zhǎng)度校驗(yàn)第三十三頁(yè),共五十一頁(yè),編輯于2023年,星期一應(yīng)用Struts2校驗(yàn)框架(2)Struts2提供的常用功能的校驗(yàn)器放在com\opensymphony\xwork2\validator\validators\default.xml文件中。第三十四頁(yè),共五十一頁(yè),編輯于2023年,星期一輸入校驗(yàn)字段校驗(yàn)器配置風(fēng)格<field…/>元素是校驗(yàn)規(guī)則文件的基本組成單位<fieldname="name"> <!--指定name屬性必須滿足必填規(guī)則--> <field-validatortype="requiredstring"> <paramname="trim">true</param> <messagekey="name.requried"/> </field-validator> </field>非字段校驗(yàn)器配置風(fēng)格<validator…/>元素是校驗(yàn)規(guī)則文件的基本組成單位<!--配置指定必填字符串的校驗(yàn)器--> <validatortype="requiredstring"> <!--使用該校驗(yàn)器校驗(yàn)name屬性--> <paramname="fieldName">name</param> <paramname="trim">true</param> <!--指定校驗(yàn)失敗后輸出name.required對(duì)應(yīng)的國(guó)際化信息--> <messagekey="name.requried"/> </validator>短路校驗(yàn)器為<validator…/>或<field../>指定一個(gè)short-circuit=“true”屬性,將某些校驗(yàn)提示信息屏蔽。<field-validatortype="requiredstring"short-circuit="true"> <paramname="trim">true</param> <messagekey="name.requried"/> </field-validator>第三十五頁(yè),共五十一頁(yè),編輯于2023年,星期一字段校驗(yàn)器與非字段校驗(yàn)器前例中的校驗(yàn)器以字段為中心,封裝在<field>中,然后通過(guò)<field-validator>子標(biāo)簽的type屬性指定校驗(yàn)器類型,此種校驗(yàn)器被稱為字段校驗(yàn)器<field-validator>實(shí)際上是一種校驗(yàn)類型<field-validator>只校驗(yàn)父標(biāo)簽<field>所指向字段Struts提供以校驗(yàn)規(guī)則位中心的使用<validator>標(biāo)簽的另外一種非字段校驗(yàn)器寫法不同其中 為校驗(yàn)器類型其中 為校驗(yàn)字段,寫法總是一樣的第三十六頁(yè),共五十一頁(yè),編輯于2023年,星期一param的值又是在哪里找到的呢?param中的name值在上述類中被定義為屬性。譬如說(shuō)在類com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator中(也就是stringLength對(duì)應(yīng)的處理類),就定義了booleantrim;intminLength,maxLength;及它們的get/set方法。第三十七頁(yè),共五十一頁(yè),編輯于2023年,星期一message的注意事項(xiàng)(1)每個(gè)field都必須擁有一個(gè)message;message錯(cuò)誤信息最后是以addFieldError實(shí)現(xiàn)的,也就是說(shuō)是field一級(jí)的錯(cuò)誤。(2)message中可以引用param變量,引用格式為${param1},如上面的例子中對(duì)password驗(yàn)證失敗的報(bào)錯(cuò)信息。(3)message的內(nèi)容可以放到全局i18n屬性文件中,并在message中以key屬性值指定,比如上面例子中對(duì)username驗(yàn)證失敗的報(bào)錯(cuò)信息。第三十八頁(yè),共五十一頁(yè),編輯于2023年,星期一輸入校驗(yàn)校驗(yàn)文件的搜索規(guī)則當(dāng)一個(gè)Action包含多個(gè)處理邏輯或者兩個(gè)Action有繼承關(guān)系,此時(shí)需要為校驗(yàn)規(guī)則文件增加校驗(yàn)規(guī)則別名文件的方式來(lái)實(shí)現(xiàn)校驗(yàn)的處理邏輯。總的校驗(yàn)規(guī)則是多個(gè)校驗(yàn)規(guī)則文件的規(guī)則總和實(shí)例:overrideRule基于Annotation的輸入校驗(yàn)使用Annotation來(lái)定義每個(gè)字段應(yīng)該滿足的規(guī)則使用驗(yàn)證器Annotation修飾Action里各屬性對(duì)應(yīng)的setter方法實(shí)例:annotation第三十九頁(yè),共五十一頁(yè),編輯于2023年,星期一輸入校驗(yàn)內(nèi)建校驗(yàn)器必填校驗(yàn)器必填字符串校驗(yàn)器整數(shù)校驗(yàn)器日期校驗(yàn)器表達(dá)式校驗(yàn)器字段表達(dá)式校驗(yàn)器郵件地址校驗(yàn)器網(wǎng)址校驗(yàn)器Vistor校驗(yàn)器轉(zhuǎn)換校驗(yàn)器字符串長(zhǎng)度校驗(yàn)器正則表達(dá)式校驗(yàn)器實(shí)例:validatorDemo第四十頁(yè),共五十一頁(yè),編輯于2023年,星期一Struts2數(shù)據(jù)驗(yàn)證及驗(yàn)證框架的應(yīng)用2.Struts2驗(yàn)證框架的應(yīng)用
Struts2提供了校驗(yàn)框架,只需要增加一個(gè)校驗(yàn)配置文件,就可以完成對(duì)數(shù)據(jù)的校驗(yàn)。Struts2提供了大量的數(shù)據(jù)校驗(yàn)器,包括表單域校驗(yàn)器和非表單域校驗(yàn)器兩種。(1)必填字符串校驗(yàn)器其校驗(yàn)規(guī)則定義文件如下:……<validators><!--需要校驗(yàn)的字段的字段名--><fieldname="name"> <!--驗(yàn)證字符串不能為空,即必填--> <field-validatortype="requiredstring"> <!--去空格--> <paramname="trim">true</param> <!--錯(cuò)誤提示信息--> <message>姓名是必需的!</message> </field-validator></field> </validators>第四十一頁(yè),共五十一頁(yè),編輯于2023年,星期一Struts2數(shù)據(jù)驗(yàn)證及驗(yàn)證框架的應(yīng)用(2)必填校驗(yàn)器該校驗(yàn)器的名字是required,也就是<field-validator>屬性中的type="required",該校驗(yàn)器要求指定的字段必須有值,與必填字符串校驗(yàn)器最大的區(qū)別就是可以有空字符串。如果把上例改為必填校驗(yàn)器,其代碼應(yīng)為:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEvalidatorsPUBLIC"-//OpenSymphonyGroup//XWorkValidator1.0//EN""/xwork/xwork-validator-1.0.2.dtd"><validators><!--需要校驗(yàn)的字段的字段名--><fieldname="name"> <!--驗(yàn)證字符串必填--> <field-validatortype="required"> <!--錯(cuò)誤提示信息--> <message>姓名是必需的!</message> </field-validator></field> </validators>第四十二頁(yè),共五十一頁(yè),編輯于2023年,星期一Struts2數(shù)據(jù)驗(yàn)證及驗(yàn)證框架的應(yīng)用(3)整數(shù)校驗(yàn)器該校驗(yàn)器的名字是int,該校驗(yàn)器要求字段的整數(shù)值必須在指定范圍內(nèi),故其有min和max參數(shù)。如果有個(gè)age輸入框,要求其必須是整數(shù),且輸入值必須在18與100之間,該校驗(yàn)器的配置應(yīng)該為:<validators> <!--需要校驗(yàn)的字段的字段名--> <fieldname="age"> <field-validatortype="int"> <!--年齡最小值--> <paramname="min">18</param> <!--年齡最大值--> <paramname="max">100</param> <!--錯(cuò)誤提示信息--> <message>年齡必須在18至100之間</message> </field-validator> </field> </validators>第四十三頁(yè),共五十一頁(yè),編輯于2023年,星期一Struts2數(shù)據(jù)驗(yàn)證及驗(yàn)證框架的應(yīng)用(4)日期校驗(yàn)器該校驗(yàn)器的名字是date,該校驗(yàn)器要求字段的日期值必須在指定范圍內(nèi),故其有min和max參數(shù)。其配置格式如下:<validators> <!--需要校驗(yàn)的字段的字段名--> <fieldname="date"> <field-validatortype="date"> <!--日期最小值--> <paramname="min">1980-01-01</param> <!--日期最大值--> <paramname="max">2009-12-31</param> <!--錯(cuò)誤提示信息--> <message>日期必須在1980-01-01至2009-12-31之間</message> </field-validator> </field> </validators>第四十四頁(yè),共五十一頁(yè),編輯于2023年,星期一Struts2數(shù)據(jù)驗(yàn)證及驗(yàn)證框架的應(yīng)用(5)郵件地址校驗(yàn)器該校驗(yàn)器的名稱是email,該校驗(yàn)器要求字段的字符如果非空,就必須是合法的郵件地址。如下面的代碼:<validators> <!--需要校驗(yàn)的字段的字段名--> <fieldname="email"> <field-validatortype="email"> <message>必須輸入有效的電子郵件地址</message> </field-validator> </field> </validators>第四十五頁(yè),共五十一頁(yè),編輯于2023年,星期一Struts2數(shù)據(jù)驗(yàn)證及驗(yàn)證框架的應(yīng)用(6)網(wǎng)址校驗(yàn)器該校驗(yàn)器的名稱是url,該校驗(yàn)器要求字段的字符如果非空,就
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人租房合同的(31篇)
- 2024-2025學(xué)年北京市房山區(qū)高一上學(xué)期期中考試歷史試卷
- 2025年公共設(shè)施配套建設(shè)項(xiàng)目房屋征收合同
- 2025年住宅銷售策劃合同模板規(guī)定
- 2025年官方離婚協(xié)議范本策劃(雙方同意版)
- 2025年全球貿(mào)易合同制定原則及合規(guī)要求解析
- 2025年債權(quán)轉(zhuǎn)讓與貸款合作協(xié)議
- 2025年車輛所有權(quán)變更策劃協(xié)議書模板
- 2025年農(nóng)村土地利用合作協(xié)議
- 2025年人事檔案授權(quán)委托協(xié)議
- 牽引管道孔壁與管道外壁之間注漿技術(shù)方案
- 肛周膿腫完整版課件
- 公司(工廠)廠牌管理規(guī)定
- 《移動(dòng)互聯(lián)網(wǎng)應(yīng)用開(kāi)發(fā)》課程標(biāo)準(zhǔn)
- 初一語(yǔ)文下冊(cè):閱讀理解知識(shí)點(diǎn)整理
- 定點(diǎn)醫(yī)療機(jī)構(gòu)接入驗(yàn)收申請(qǐng)表
- 膿毒血癥指南
- 四年級(jí)下冊(cè)口算練習(xí)-減法簡(jiǎn)便計(jì)算
- 【企業(yè)杜邦分析國(guó)內(nèi)外文獻(xiàn)綜述6000字】
- 腹部按壓技巧腸鏡檢查輔助技巧
- 安徽華納化學(xué)工業(yè)有限公司年產(chǎn)1000噸均苯四甲酸二酐、300噸潤(rùn)滑油助劑項(xiàng)目環(huán)境影響報(bào)告書
評(píng)論
0/150
提交評(píng)論