apple0668
TDD,Agile,Scrum,Core Java,J2EE,Investment Blank
BlogJava
首頁
新隨筆
聚合
管理
隨筆-61 評(píng)論-159 文章-0 trackbacks-0
深入struts2中validation校驗(yàn)框架的原理和使用(一)
在struts2中如果action繼承ActionSupport,就可以重寫
public void validate()
方法,如果是想校驗(yàn)?zāi)硞€(gè)方法則如下:
public String login() throws Exception {....................};則校驗(yàn)方法為
public void validateLogin() ,也就是validate+要被校驗(yàn)的方法名(注意頭字母要大寫),這樣就可以實(shí)現(xiàn)所謂的服務(wù)器端的字段校驗(yàn)。
struts2給我們提供了一個(gè)功能比較強(qiáng)大的
validation校驗(yàn)框架。
以下介紹struts2校驗(yàn)框架的使用:
在一個(gè)action中,例如:
1
import
java.util.Date;
2
3
import
com.opensymphony.xwork2.ActionSupport;
4
5
@SuppressWarnings(
"
serial
"
)
6
public
class
RegisterAction
extends
ActionSupport
{
7
private
String name;
8
private
int
age;
9
private
Date birthday;
10
11
@Override
12
public
String execute()
throws
Exception
{
13
//
TODO Auto-generated method stub
14
return
SUCCESS;
15
}
16
@Override
17
18
public
String getName()
{
19
return
name;
20
}
21
public
void
setName(String name)
{
22
this
.name
=
name;
23
}
24
25
public
int
getAge()
{
26
return
age;
27
}
28
public
void
setAge(
int
age)
{
29
this
.age
=
age;
30
}
31
public
Date getBirthday()
{
32
return
birthday;
33
}
34
public
void
setBirthday(Date birthday)
{
35
this
.birthday
=
birthday;
36
}
37
38
}
在action類的同一個(gè)包里面加入相關(guān)RegisterAction-validation.xml文件,
命名規(guī)則為:action名-validation.xml
首先要些校驗(yàn)框架的的xml文件先從xml文件的dtd入手,用firefox或者chrome打開dtd(IE不可以正常打開),地址為:
http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd
,以下是校驗(yàn)框架的dtd:
1
<?
xml version="1.0" encoding="UTF-8"
?>
2
3
<!--
4
XWork Validators DTD.
5
Used the following DOCTYPE.
6
7
<!DOCTYPE validators PUBLIC
8
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
9
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
10
-->
11
12
13
<!
ELEMENT validators (field|validator)+
>
14
15
<!
ELEMENT field (field-validator+)
>
16
<!
ATTLIST field
17
name CDATA #REQUIRED
18
>
19
20
<!
ELEMENT field-validator (param*, message)
>
21
<!
ATTLIST field-validator
22
type CDATA #REQUIRED
23
short-circuit (true|false) "false"
24
>
25
26
<!
ELEMENT validator (param*, message)
>
27
<!
ATTLIST validator
28
type CDATA #REQUIRED
29
short-circuit (true|false) "false"
30
>
31
32
<!
ELEMENT param (#PCDATA)
>
33
<!
ATTLIST param
34
name CDATA #REQUIRED
35
>
36
37
<!
ELEMENT message (#PCDATA)
>
38
<!
ATTLIST message
39
key CDATA #IMPLIED
40
>
PS:看不懂dtd的,google一下dtd一些資料即可。
通過校驗(yàn)框架的dtd的規(guī)范來寫校驗(yàn)框架的xml配置文件,配置文件如下:
1
<!
DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
2
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"
>
3
<
validators
>
4
<
field
name
="name"
>
5
<
field-validator
type
="requiredstring"
>
6
<
param
name
="trim"
>
true
</
param
>
7
<
message
>
the name shouldn't be blank!
</
message
>
8
</
field-validator
>
9
<
field-validator
type
="stringlength"
>
10
<
param
name
="minLength"
>
5
</
param
>
11
<
param
name
="maxLength"
>
10
</
param
>
12
<
message
>
name's length should be between ${minLength} and ${maxLength}!
</
message
>
13
</
field-validator
>
14
</
field
>
15
<
field
name
="age"
>
16
<
field-validator
type
="required"
>
17
<
message
>
age should not be blank!
</
message
>
18
</
field-validator
>
19
20
<
field-validator
type
="int"
>
21
<
param
name
="min"
>
1
</
param
>
22
<
param
name
="max"
>
150
</
param
>
23
<
message
>
age should be between ${min} and ${max}
</
message
>
24
</
field-validator
>
25
</
field
>
26
<
field
name
="birthday"
>
27
<
field-validator
type
="required"
>
28
<
message
>
birthday should not be blank!
</
message
>
29
</
field-validator
>
30
31
<
field-validator
type
="date"
>
32
<
param
name
="min"
>
2001-01-01
</
param
>
33
<
param
name
="max"
>
2003-12-31
</
param
>
34
<
message
>
birthday should be between ${min} and ${max}
</
message
>
35
</
field-validator
>
36
</
field
>
37
</
validators
>
其中校驗(yàn)框架的xml配置文件里面的一些參數(shù)不是隨意的,是根據(jù)以下類里面來的
1
<?
xml version="1.0" encoding="UTF-8"
?>
2
<!
DOCTYPE validators PUBLIC
3
"-//OpenSymphony Group//XWork Validator Config 1.0//EN"
4
"http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd"
>
5
<!--
START SNIPPET: validators-default
-->
6
<
validators
>
7
<
validator
name
="required"
class
="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"
/>
8
<
validator
name
="requiredstring"
class
="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"
/>
9
<
validator
name
="int"
class
="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"
/>
10
<
validator
name
="double"
class
="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"
/>
11
<
validator
name
="date"
class
="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"
/>
12
<
validator
name
="expression"
class
="com.opensymphony.xwork2.validator.validators.ExpressionValidator"
/>
13
<
validator
name
="fieldexpression"
class
="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"
/>
14
<
validator
name
="email"
class
="com.opensymphony.xwork2.validator.validators.EmailValidator"
/>
15
<
validator
name
="url"
class
="com.opensymphony.xwork2.validator.validators.URLValidator"
/>
16
<
validator
name
="visitor"
class
="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"
/>
17
<
validator
name
="conversion"
class
="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"
/>
18
<
validator
name
="stringlength"
class
="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"
/>
19
<
validator
name
="regex"
class
="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"
/>
20
</
validators
>
21
<!--
END SNIPPET: validators-default
-->
1、先從
requiredstring
入手,找到
com.opensymphony.xwork2.validator.validators.RequiredStringValidator
類
1
public
class
RequiredStringValidator
extends
FieldValidatorSupport
{
2
3
private
boolean
doTrim
=
true
;
4
5
6
public
void
setTrim(
boolean
trim)
{
7
doTrim
=
trim;
8
}
9
10
public
boolean
getTrim()
{
11
return
doTrim;
12
}
13
14
public
void
validate(Object object)
throws
ValidationException
{
15
String fieldName
=
getFieldName();
16
Object value
=
this
.getFieldValue(fieldName, object);
17
18
if
(
!
(value
instanceof
String))
{
19
addFieldError(fieldName, object);
20
}
else
{
21
String s
=
(String) value;
22
23
if
(doTrim)
{
24
s
=
s.trim();
25
}
26
27
if
(s.length()
==
0
)
{
28
addFieldError(fieldName, object);
29
}
30
}
31
}
32
}
33
注:其中trim就是此類中的一個(gè)聲明布爾類型的變量。
2、校驗(yàn)框架中的
stringLength,對(duì)應(yīng)的類是
com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator
1
public
class
StringLengthFieldValidator
extends
FieldValidatorSupport
{
2
3
private
boolean
doTrim
=
true
;
4
private
int
maxLength
=
-
1
;
5
private
int
minLength
=
-
1
;
6
7
8
public
void
setMaxLength(
int
maxLength)
{
9
this
.maxLength
=
maxLength;
10
}
11
12
public
int
getMaxLength()
{
13
return
maxLength;
14
}
15
16
public
void
setMinLength(
int
minLength)
{
17
this
.minLength
=
minLength;
18
}
19
20
public
int
getMinLength()
{
21
return
minLength;
22
}
23
24
public
void
setTrim(
boolean
trim)
{
25
doTrim
=
trim;
26
}
27
28
public
boolean
getTrim()
{
29
return
doTrim;
30
}
31
32
public
void
validate(Object object)
throws
ValidationException
{
33
String fieldName
=
getFieldName();
34
String val
=
(String) getFieldValue(fieldName, object);
35
36
if
(val
==
null
||
val.length()
<=
0
)
{
37
//
use a required validator for these
38
return
;
39
}
40
if
(doTrim)
{
41
val
=
val.trim();
42
if
(val.length()
<=
0
)
{
43
//
use a required validator
44
return
;
45
}
46
}
47
48
if
((minLength
>
-
1
)
&&
(val.length()
<
minLength))
{
49
addFieldError(fieldName, object);
50
}
else
if
((maxLength
>
-
1
)
&&
(val.length()
>
maxLength))
{
51
addFieldError(fieldName, object);
52
}
53
}
54
}
55
注:xml文件里面的兩個(gè)
minLength
,
maxLength
對(duì)應(yīng)的怪了中聲明的兩個(gè)變量對(duì)應(yīng),其中xml中的
${minLength}
和
${maxLength}就是調(diào)用類中的getter方法。
總結(jié):xml文件中其他屬性,比如
required、
date
等也可以通過以上的方法來分析,就清楚整個(gè)校驗(yàn)框架的原理,使用就很簡(jiǎn)單啦。
PS:現(xiàn)在使用的是field校驗(yàn),是field錯(cuò)誤級(jí)別,詳細(xì)參考:
struts2中action和field級(jí)別錯(cuò)誤處理
-------------------------------------------------------------------------------------------------
PS:本博客文章,如果沒有注明是有“轉(zhuǎn)”字樣,屬于本人原創(chuàng)。如果需要轉(zhuǎn)載,務(wù)必
注明作者
和
文章的詳細(xì)出處地址
,否則不允許轉(zhuǎn)載,多謝合作!
posted on 2008-11-28 22:56
apple0668
閱讀(3739)
評(píng)論(2)
編輯
收藏
所屬分類:
struts2
評(píng)論:
#
re: 深入struts2中validation校驗(yàn)框架的原理和使用(一) 2008-12-01 11:13 |
楊愛友
這個(gè)validation干嘛用的?能不能舉個(gè)具體例子?
回復(fù)
更多評(píng)論
#
re: 深入struts2中validation校驗(yàn)框架的原理和使用(一)[未登錄]
2009-01-01 12:06 |
apple0668
validation,主要是在服務(wù)器端對(duì)數(shù)據(jù)進(jìn)行校驗(yàn)的。
回復(fù)
更多評(píng)論
新用戶注冊(cè)
刷新評(píng)論列表
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關(guān)文章:
struts2設(shè)置開發(fā)模式控制臺(tái)錯(cuò)誤信息
深入struts2中validation校驗(yàn)框架的原理和使用(二)
深入struts2中validation校驗(yàn)框架的原理和使用(一)
struts2中action和field級(jí)別錯(cuò)誤處理
eclipse的第一個(gè)struts2插件:Alveole Studio MVC Web Project An eclipse plugin for Struts 2
ssh2中采用dao---service---action分層結(jié)構(gòu)
struts2中head標(biāo)簽的使用
struts2中命名空間的使用
Email:
chensp1230@163.com
歡迎交流
框架是告訴人們不該去做什么,而不是告訴人們?cè)撊プ鍪裁矗蝗萜魇歉嬖V人們?cè)撊プ鍪裁矗皇歉嬖V人們不該去做什么!
<
2008年11月
>
日
一
二
三
四
五
六
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
留言簿
(10)
給我留言
查看公開留言
查看私人留言
我參與的團(tuán)隊(duì)
深圳Java俱樂部(0/0)
Netbeans 愛好者(0/0)
隨筆分類
(63)
Aglets(1)
drools(2)
eclipse(6)
groovy
hibernate(17)
java(7)
jboss
junit(3)
Log4(2)
MongoDB(1)
oracle(1)
spring(4)
struts2(8)
svn(1)
tomcat(4)
webwork(4)
web報(bào)表(1)
xml
心情港灣
集群(1)
隨筆檔案
(61)
2015年3月 (1)
2012年7月 (1)
2012年4月 (1)
2011年5月 (3)
2010年1月 (2)
2009年3月 (1)
2008年12月 (2)
2008年11月 (5)
2008年10月 (16)
2008年9月 (1)
2008年4月 (1)
2008年1月 (2)
2007年11月 (2)
2007年10月 (15)
2007年9月 (8)
友情鏈接
開源在線手冊(cè)
最新隨筆
1.?Ehcache集群方案
2.?MongoDB安裝手記
3.?任何人都可以重構(gòu)<轉(zhuǎn)載>
4.?JDK6中JWS自帶webservice應(yīng)用
5.?解決:Eclipse啟動(dòng)tomcat 訪問不了 手動(dòng)啟動(dòng)可以訪問
6.?IntelliJ Idea10 常用快捷鍵
7.?Drools語法詳解<轉(zhuǎn)>
8.?eclipse3.4安裝drools插件手記
9.?Java日期時(shí)間運(yùn)算
10.?java中使用功能強(qiáng)悍的正則表達(dá)式
搜索
最新評(píng)論
1.?re: Tomcat:IOException while loading persisted sessions: java.io.EOFException解決手記
非常感謝樓主分享,解決問題, Tomcat 7.0.59
--Gozs
2.?re: Tomcat:IOException while loading persisted sessions: java.io.EOFException解決手記[未登錄]
正解
--gao
3.?re: Tomcat:IOException while loading persisted sessions: java.io.EOFException解決手記
@123
已解決,謝謝提示myeclipse相關(guān)的有用信息~~
--sequoah
4.?re: Tomcat:IOException while loading persisted sessions: java.io.EOFException解決手記
贊 清空work文件夾就可以了
--維尼
5.?re: Tomcat:IOException while loading persisted sessions: java.io.EOFException解決手記
很好 問題解決了!
--兔兔
閱讀排行榜
1.?Tomcat:IOException while loading persisted sessions: java.io.EOFException解決手記(85555)
2.?系統(tǒng)學(xué)習(xí)hibernate之一:利用hibernate中的SchemaExport生成數(shù)據(jù)表(18649)
3.?eclipse的第一個(gè)struts2插件:Alveole Studio MVC Web Project An eclipse plugin for Struts 2(15701)
4.?Subversion之路---實(shí)現(xiàn)精細(xì)的目錄訪問權(quán)限控制<轉(zhuǎn)>(11322)
5.?IntelliJ Idea10 常用快捷鍵(9327)
評(píng)論排行榜
1.?Tomcat:IOException while loading persisted sessions: java.io.EOFException解決手記(62)
2.?eclipse的第一個(gè)struts2插件:Alveole Studio MVC Web Project An eclipse plugin for Struts 2(32)
3.?Tomcat啟動(dòng)端口被占用異常處理(9)
4.?升級(jí)瑞星防火墻2008后,在myeclipse6.0中啟動(dòng)tomcat遇到怪問題!(7)
5.?JDK6中JWS自帶webservice應(yīng)用(6)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 apple0668
主站蜘蛛池模板:
亚洲日本va一区二区三区
|
国产亚洲成归v人片在线观看
|
99久久精品国产免费
|
a级在线观看免费
|
毛片在线全部免费观看
|
伊人久久大香线蕉免费视频
|
国产国产人免费人成成免视频
|
污污视频网站免费观看
|
男女猛烈无遮掩视频免费软件
|
全部一级一级毛片免费看
|
高清免费久久午夜精品
|
亚洲国产免费综合
|
三年片免费高清版
|
一级毛片免费观看不卡视频
|
18成禁人视频免费网站
|
一区二区无码免费视频网站
|
美女被免费视频网站a国产
|
四虎永久免费影院
|
亚洲欭美日韩颜射在线二
|
亚洲av无码潮喷在线观看
|
久久精品国产亚洲AV高清热
|
亚洲欧洲日产国码二区首页
|
免费国产黄网站在线观看可以下载
|
在线免费观看国产视频
|
亚洲成年人啊啊aa在线观看
|
亚洲精品无码日韩国产不卡?V
|
国产在线jyzzjyzz免费麻豆
|
成年美女黄网站色大免费视频
|
免费无码黄网站在线观看
|
哒哒哒免费视频观看在线www
|
亚洲乱亚洲乱少妇无码
|
国产AV无码专区亚洲精品
|
亚洲区精品久久一区二区三区
|
亚洲AV成人影视在线观看
|
特级aaaaaaaaa毛片免费视频
|
久久久久久噜噜精品免费直播
|
久久九九AV免费精品
|
国产精品视频永久免费播放
|
国产一区二区三区在线免费
|
亚洲精品中文字幕乱码三区
|
亚洲国产精品一区二区久
|