日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Struts2驗(yàn)證框架的使用和擴(kuò)展

struts2的能夠?qū)η芭_(tái)提交的表單數(shù)據(jù)進(jìn)行輸入有效性校驗(yàn),通常有兩種方式:

1、在Action類中通過validatexx驗(yàn)證,這種方式很簡(jiǎn)單,在此不再贅述;

2、通過編寫xx-validation.xml文件執(zhí)行表單驗(yàn)證,當(dāng)用戶提交表單請(qǐng)求后,struts會(huì)優(yōu)先執(zhí)行xml文件,如果校驗(yàn)不通過是不會(huì)讓請(qǐng)求訪問指定action的。

本文介紹一下struts2通過xml文件進(jìn)行校驗(yàn)的方法并說明怎么樣擴(kuò)展自定義的驗(yàn)證。

一、struts2驗(yàn)證框架的包位置

部署struts2項(xiàng)目有一個(gè)必備jar包:xwork-core-*.jar,在這個(gè)包中有這樣一個(gè)package"com.opensymphony.xwork2.validator.validators",所有官方驗(yàn)證類就放在這下面的,在這個(gè)包下面有一個(gè)"default.xml"文件,這就是驗(yàn)證框架的核心文件,里面配置了所有的驗(yàn)證類數(shù)據(jù)。

驗(yàn)證類的格式為: ,在配置的時(shí)候只需要使用別名就能執(zhí)行指定驗(yàn)證了。

在這介紹struts2的幾個(gè)常用的驗(yàn)證類:

required:字段不能為空

requiredstring:字符串不能為空

int:int類型(可指定范圍)

long:long類型(可指定范圍)

short:short類型(可指定范圍)

double:double類型(可指定范圍)

date:時(shí)間格式(可指定范圍)

expression:ognl表達(dá)式判斷

fieldexpression:ognl表達(dá)式判斷

email:郵箱判斷

url:url路徑判斷

visitor:把同一個(gè)驗(yàn)證程序配置文件用于多個(gè)動(dòng)作(對(duì)一個(gè)Bean寫驗(yàn)證文件,每個(gè)使用的Action只要引用)

conversion:格式轉(zhuǎn)換

stringlength:字符串長(zhǎng)度

regex:正則表達(dá)式判斷

這里有個(gè)地址詳細(xì)介紹了這幾種驗(yàn)證的使用方法,大家可以參考下:http://code.google.com/p/j2eewiki/wiki/Struts2Validator

以上驗(yàn)證乍看還是非常全面的,但是很多驗(yàn)證功能還不夠強(qiáng)大(比如stringlength是把任何文字都當(dāng)做1的長(zhǎng)度,而中文像UTF-8是3個(gè)字節(jié)的長(zhǎng)度,這樣驗(yàn)證效果就不準(zhǔn)確了),所以很多時(shí)候是需要進(jìn)行自定義驗(yàn)證的,這個(gè)隨后再說。

二、使用xml配置驗(yàn)證

①copy上面提到的"default.xml"文件到Action同級(jí)目錄下,修改文件名為"action名-validation.xml"。假設(shè)有這樣一個(gè)Action:com.struts.action.UserAction.java,那么你需要將xml文件放到com.struts.action包下面,并且改名為"UserAction-validation.xml"。

②刪除標(biāo)簽 里所有的內(nèi)容,并且更改xml上面的dtd版本為1.0.2.dtd,這里我也不知道為什么1.0.0跑不起,反正改了就能執(zhí)行了。

Xml代碼

 
 
  1.         "-//OpenSymphony Group//XWork Validator 1.0.2//EN"      
  2.         "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">  

 

③編寫驗(yàn)證文件,field標(biāo)簽表示被驗(yàn)證的字段項(xiàng),field-validator標(biāo)簽表示使用什么驗(yàn)證約束,short-circuit表示如果有多個(gè)驗(yàn)證約束時(shí)只要有一個(gè)不通過則后面就不執(zhí)行驗(yàn)證了,message表示驗(yàn)證不通過時(shí)返回的錯(cuò)誤消息。

Xml代碼

 
 
  1.     
  2.         
  3.         用戶名不能為空 message>    
  4.      field-validator>    
  5. field>   

 

按照上面三步,一個(gè)基本的驗(yàn)證就出來了,大家可以去試試,只要提交的表單訪問UserAction都會(huì)先通過xml的驗(yàn)證。假如你只想驗(yàn)證UserAction中的userAdd方法,則只需要將xml文件改名為"UserAction-userAdd-validattion.xml"即可。

三、擴(kuò)展struts2驗(yàn)證類

其實(shí)自定義驗(yàn)證類很簡(jiǎn)單,你只需要仿照struts2的任何一個(gè)驗(yàn)證類就能做出來,前面提到不能驗(yàn)證utf-8格式的字符長(zhǎng)度,我們?cè)谶@就做一個(gè)獲取utf-8長(zhǎng)度的自定義框架。

①創(chuàng)建驗(yàn)證框架擴(kuò)展類,這里必須繼承 FieldValidatorSupport 類,重寫validate方法,具體驗(yàn)證代碼就在validate方法中寫,這里的get、set就是在xml中出現(xiàn)的屬性參數(shù)。這段代碼還不夠好,其實(shí)可以把encoding也作為屬性的,這樣傳入任何編碼格式都能獲取該編碼對(duì)應(yīng)的字符長(zhǎng)度。

Java代碼

 
 
  1. public class CheckStringLength extends FieldValidatorSupport {     
  2.          
  3.     private boolean trim;  // 是否去首位空格     
  4.     private int minLength; //最大長(zhǎng)度     
  5.     private int maxLength; //最小長(zhǎng)度     
  6.     private static final String ENCODING = "UTF-8"; //編碼格式(默認(rèn)utf-8)     
  7.          
  8.     /*    
  9.      * 構(gòu)造方法初始化默認(rèn)數(shù)據(jù)    
  10.      */    
  11.     public CheckStringLength() {     
  12.         this.trim = true;     
  13.         this.minLength = -1;     
  14.         this.maxLength = -1;     
  15.     }     
  16.          
  17.     public boolean isTrim() {     
  18.         return trim;     
  19.     }     
  20.     public void setTrim(boolean trim) {     
  21.         this.trim = trim;     
  22.     }     
  23.     public int getMinLength() {     
  24.         return minLength;     
  25.     }     
  26.     public void setMinLength(int minLength) {     
  27.         this.minLength = minLength;     
  28.     }     
  29.     public int getMaxLength() {     
  30.         return maxLength;     
  31.     }     
  32.     public void setMaxLength(int maxLength) {     
  33.         this.maxLength = maxLength;     
  34.     }     
  35.     
  36.     @Override    
  37.     public void validate(Object arg0) throws ValidationException {     
  38.         String fieldName = this.getFieldName();     
  39.              
  40.         String val = (String) this.getFieldValue(fieldName, arg0);     
  41.              
  42.         //如果值為空則直接不通過     
  43.         if (val == null || val.length() <= 0) {     
  44.             return;     
  45.         }     
  46.              
  47.         if (trim) {     
  48.             val = val.trim();     
  49.             ////如果值為空則直接不通過     
  50.             if (val == null || val.length() <= 0) {     
  51.                 return;     
  52.             }     
  53.         }     
  54.              
  55.         int length = 0;     
  56.         try {     
  57.             //根據(jù)編碼格式獲得字符長(zhǎng)度     
  58.             length = val.getBytes(ENCODING).length;     
  59.         } catch (UnsupportedEncodingException e) {     
  60.             length = val.getBytes().length;     
  61.         }     
  62.              
  63.         /*    
  64.          *判斷字符長(zhǎng)度范圍     
  65.          */    
  66.         if (minLength > -1 && length < minLength) {     
  67.             this.addFieldError(fieldName, arg0);     
  68.         }     
  69.         if (maxLength > -1 && maxLength > maxLength) {     
  70.             this.addFieldError(fieldName, arg0);     
  71.         }     
  72.     }     
  73.          
  74. }    

 

②新建validators.xml文件,將"default.xml"的配置信息和自定義驗(yàn)證類的配置信息放到文件中,最后把validators.xml文件放到源碼根目錄下:

Xml代碼

 
 
  1. xml version="1.0" encoding="UTF-8"?>       
  2.         "-//OpenSymphony Group//XWork Validator Config 1.0//EN"        
  3.         "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">       
  4.     
  5.     
  6.         
  7.         
  8.         
  9.         
  10.         
  11.         
  12.         
  13.         
  14.         
  15.         
  16.         
  17.         
  18.         
  19.         
  20.         
  21.         
  22.          
  23.          
  24.         
  25.     validators>   

 

③按照前面所說的編寫表單驗(yàn)證規(guī)則,注意這里的param就是上面CheckStringLength類中的屬性,但是屬性是根據(jù)get、set方法來的 (因?yàn)閟truts2做了一個(gè)很蛋痛的事:他的驗(yàn)證類中有這樣一個(gè)屬性"doTrim",但是該屬性對(duì)應(yīng)的get、set方法是getTrim、setTrim,配置文件里必須這樣寫 false,記住是根據(jù)set方法配置param)。

Xml代碼

 
 
  1.         "-//OpenSymphony Group//XWork Validator 1.0.2//EN"      
  2.         "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">    
  3.     
  4.     
  5.          
  6.         
  7.             
  8.             用戶名不能為空 message>    
  9.          field-validator>    
  10.             
  11.             10 param>    
  12.             6 param>    
  13.             用戶名必須是6到10位字符! message>    
  14.          field-validator>    
  15.      field>    
  16. validators> 

 

基本上一個(gè)簡(jiǎn)單的自定義驗(yàn)證就完成了,大家可以手動(dòng)試試,這個(gè)東西確實(shí)很簡(jiǎn)單。

最后附上擴(kuò)展的幾個(gè)驗(yàn)證類,希望對(duì)大家有所幫助 :

Xml代碼

 
 
  1.     
  2.         
  3.          
  4.         
  5.          
  6.      validator>    
  7.          
  8.      validator>    
  9.          
  10.         
  11.          
  12.         

 

最后感謝同事jwt童鞋做的擴(kuò)展框架。


網(wǎng)站標(biāo)題:Struts2驗(yàn)證框架的使用和擴(kuò)展
當(dāng)前URL:http://www.dlmjj.cn/article/cohhsdp.html