成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Struts2驗證框架的使用和擴展

開發(fā) 后端
本文介紹一下struts2通過xml文件進行校驗的方法并說明怎么樣擴展自定義的驗證。

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

1、在Action類中通過validatexx驗證,這種方式很簡單,在此不再贅述;

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

本文介紹一下struts2通過xml文件進行校驗的方法并說明怎么樣擴展自定義的驗證。

一、struts2驗證框架的包位置

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

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

在這介紹struts2的幾個常用的驗證類:

required:字段不能為空

requiredstring:字符串不能為空

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

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

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

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

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

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

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

email:郵箱判斷

url:url路徑判斷

visitor:把同一個驗證程序配置文件用于多個動作(對一個Bean寫驗證文件,每個使用的Action只要引用)

conversion:格式轉(zhuǎn)換

stringlength:字符串長度

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

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

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

二、使用xml配置驗證

①copy上面提到的"default.xml"文件到Action同級目錄下,修改文件名為"action名-validation.xml"。假設(shè)有這樣一個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">  

 

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

Xml代碼

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

 

 

 

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

三、擴展struts2驗證類

其實自定義驗證類很簡單,你只需要仿照struts2的任何一個驗證類就能做出來,前面提到不能驗證utf-8格式的字符長度,我們在這就做一個獲取utf-8長度的自定義框架。

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

Java代碼

  1. public class CheckStringLength extends FieldValidatorSupport {     
  2.          
  3.     private boolean trim;  // 是否去首位空格     
  4.     private int minLength; //最大長度     
  5.     private int maxLength; //最小長度     
  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ù)編碼格式獲得字符長度     
  58.             length = val.getBytes(ENCODING).length;     
  59.         } catch (UnsupportedEncodingException e) {     
  60.             length = val.getBytes().length;     
  61.         }     
  62.              
  63.         /*    
  64.          *判斷字符長度范圍     
  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"的配置信息和自定義驗證類的配置信息放到文件中,最后把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>   

 

 

③按照前面所說的編寫表單驗證規(guī)則,注意這里的param就是上面CheckStringLength類中的屬性,但是屬性是根據(jù)get、set方法來的 (因為struts2做了一個很蛋痛的事:他的驗證類中有這樣一個屬性"doTrim",但是該屬性對應(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. <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> 

 

 

 

 

基本上一個簡單的自定義驗證就完成了,大家可以手動試試,這個東西確實很簡單。

最后附上擴展的幾個驗證類,希望對大家有所幫助 :

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童鞋做的擴展框架。

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

2009-06-25 15:37:12

Struts2教程Validation框

2009-02-04 13:13:03

2009-06-05 09:58:20

struts2驗證用戶注冊

2009-06-25 15:33:12

Struts2教程使用validate驗證數(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程序

2009-06-26 17:15:44

Struts2

2011-05-03 09:40:58

iBatis

2009-02-04 10:51:07

2009-07-14 17:10:44

struts2webwork

2009-06-04 09:20:19

struts2 if標(biāo)使用

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
點贊
收藏

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

主站蜘蛛池模板: 日韩视频在线免费观看 | 一级片免费网站 | 99热精品久久 | av黄在线观看 | 国产精品国产精品国产专区不片 | 国产丝袜一区二区三区免费视频 | 精品成人一区二区 | 亚洲精品久久久久久久久久吃药 | 成人小视频在线免费观看 | 羞羞视频网站在线观看 | 欧美一级黄色片在线观看 | 亚洲精品一区二区三区在线 | 国产精品日产欧美久久久久 | 欧美午夜精品 | 一级做a爰片久久毛片 | 九九免费在线视频 | 久久99精品久久久久久国产越南 | 亚洲国产一区二区视频 | 91伊人| 精品综合久久久 | 日韩国产中文字幕 | 精品国产一区二区三区久久影院 | 欧美在线国产精品 | 一区二区三区欧美在线观看 | 欧美a在线观看 | 亚洲精品免费在线观看 | 青青操91 | 日韩一区二 | 精品国产一二三区 | 国产精品久久久久久238 | 精品国产乱码久久久久久1区2区 | 青春草国产| 久操亚洲 | 精品少妇一区二区三区日产乱码 | 中文字幕日本一区二区 | 国产精品成人一区二区三区夜夜夜 | 1区2区3区视频| 欧美色综合一区二区三区 | 欧美一级淫片免费视频黄 | 久久国产欧美日韩精品 | 色狠狠一区 |