自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Struts2驗(yàn)證框架的使用和擴(kuò)展

開(kāi)發(fā) 后端
本文介紹一下struts2通過(guò)xml文件進(jìn)行校驗(yàn)的方法并說(shuō)明怎么樣擴(kuò)展自定義的驗(yàn)證。

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

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

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

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

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

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

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

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

required:字段不能為空

requiredstring:字符串不能為空

int:int類(lèi)型(可指定范圍)

long:long類(lèi)型(可指定范圍)

short:short類(lèi)型(可指定范圍)

double:double類(lèi)型(可指定范圍)

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

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

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

email:郵箱判斷

url:url路徑判斷

visitor:把同一個(gè)驗(yàn)證程序配置文件用于多個(gè)動(dòng)作(對(duì)一個(gè)Bean寫(xiě)驗(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è)隨后再說(shuō)。

二、使用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">  

 

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

Xml代碼

  1. <field name="user.name">    
  2.     <field-validator type="requiredstring" short-circuit="true">    
  3.         <message>用戶名不能為空message>    
  4.     field-validator>    
  5. field>   

 

 

 

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

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

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

①創(chuàng)建驗(yàn)證框架擴(kuò)展類(lèi),這里必須繼承 FieldValidatorSupport 類(lèi),重寫(xiě)validate方法,具體驗(yàn)證代碼就在validate方法中寫(xiě),這里的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.         //如果值為空則直接不通過(guò)     
  43.         if (val == null || val.length() <= 0) {     
  44.             return;     
  45.         }     
  46.              
  47.         if (trim) {     
  48.             val = val.trim();     
  49.             ////如果值為空則直接不通過(guò)     
  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)證類(lèi)的配置信息放到文件中,最后把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. <validators>    
  6.     <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>    
  7.     <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>    
  8.     <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>    
  9.     <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>    
  10.     <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>    
  11.     <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>    
  12.     <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>    
  13.     <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>    
  14.     <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>    
  15.     <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>    
  16.     <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>    
  17.     <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>    
  18.     <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>    
  19.     <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>    
  20.     <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>    
  21.     <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>    
  22.          
  23.         
  24.     <validator name="stringlengthencoding" class="com.bless.struts2.validate.CheckStringLength"/>    
  25.    validators>   

 

 

③按照前面所說(shuō)的編寫(xiě)表單驗(yàn)證規(guī)則,注意這里的param就是上面CheckStringLength類(lèi)中的屬性,但是屬性是根據(jù)get、set方法來(lái)的 (因?yàn)閟truts2做了一個(gè)很蛋痛的事:他的驗(yàn)證類(lèi)中有這樣一個(gè)屬性"doTrim",但是該屬性對(duì)應(yīng)的get、set方法是getTrim、setTrim,配置文件里必須這樣寫(xiě) 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. <validators>    
  5.         
  6.     <field name="user.name">    
  7.         <field-validator type="requiredstring" short-circuit="true">    
  8.             <message>用戶名不能為空message>    
  9.         field-validator>    
  10.         <field-validator type="stringlengthencoding" short-circuit="true">    
  11.             <param name="maxLength">10param>    
  12.             <param name="minLength">6param>    
  13.             <message>用戶名必須是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)證類(lèi),希望對(duì)大家有所幫助 :

Xml代碼

  1.     
  2.     <validator name="stringlengthencoding" class="com.bless.struts2.validate.CheckStringLength"/>    
  3.         
  4.     <validator name="checkformat" class="com.bless.struts2.validate.CheckFormat"/>    
  5.         
  6.     <validator name="checkhalfwidthdigit" class="com.bless.struts2.validate.CheckHalfWidthDigit">validator>    
  7.         
  8.     <validator name="checkspecialchar" class="com.bless.struts2.validate.CheckSpecialChar">validator>    
  9.         
  10.     <validator name="checkdate" class="com.bless.struts2.validate.CheckDate"/>    
  11.         
  12.     <validator name="checkdoublerange" class="com.bless.struts2.validate.CheckDoubleAccuracy"/>    

 

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

責(zé)任編輯:金賀 來(lái)源: JavaEye博客
相關(guān)推薦

2009-06-25 15:37:12

Struts2教程Validation框

2009-02-04 13:13:03

2009-06-05 09:58:20

struts2驗(yàn)證用戶注冊(cè)

2009-06-25 15:33:12

Struts2教程使用validate驗(yàn)證數(shù)據(jù)

2009-02-04 12:00:08

2009-07-29 09:54:34

struts2和str

2012-05-10 14:00:06

StrutsjsonJava

2009-06-04 11:08:32

struts2 val框架

2009-06-04 10:36:11

struts2 jar

2009-09-14 19:31:36

Struts1和Str

2009-06-25 15:11:28

Struts2教程Struts2程序

2011-05-03 09:40:58

iBatis

2009-06-26 17:15:44

Struts2

2009-02-04 10:51:07

2009-06-04 09:20:19

struts2 if標(biāo)使用

2009-07-14 17:10:44

struts2webwork

2009-07-03 09:35:57

Struts2 JSP

2011-11-25 13:01:16

JavaMVCstruts2

2009-06-04 08:34:24

Struts2配置struts.xml

2009-06-05 10:05:50

struts menustruts2
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)