apple0668
TDD,Agile,Scrum,Core Java,J2EE,Investment Blank
BlogJava
首頁
新隨筆
聚合
管理
隨筆-61 評論-159 文章-0 trackbacks-0
深入struts2中validation校驗框架的原理和使用(一)
在struts2中如果action繼承ActionSupport,就可以重寫
public void validate()
方法,如果是想校驗某個方法則如下:
public String login() throws Exception {....................};則校驗方法為
public void validateLogin() ,也就是validate+要被校驗的方法名(注意頭字母要大寫),這樣就可以實現所謂的服務器端的字段校驗。
struts2給我們提供了一個功能比較強大的
validation校驗框架。
以下介紹struts2校驗框架的使用:
在一個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類的同一個包里面加入相關RegisterAction-validation.xml文件,
命名規則為:action名-validation.xml
首先要些校驗框架的的xml文件先從xml文件的dtd入手,用firefox或者chrome打開dtd(IE不可以正常打開),地址為:
http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd
,以下是校驗框架的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一些資料即可。
通過校驗框架的dtd的規范來寫校驗框架的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
>
其中校驗框架的xml配置文件里面的一些參數不是隨意的,是根據以下類里面來的
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就是此類中的一個聲明布爾類型的變量。
2、校驗框架中的
stringLength,對應的類是
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文件里面的兩個
minLength
,
maxLength
對應的怪了中聲明的兩個變量對應,其中xml中的
${minLength}
和
${maxLength}就是調用類中的getter方法。
總結:xml文件中其他屬性,比如
required、
date
等也可以通過以上的方法來分析,就清楚整個校驗框架的原理,使用就很簡單啦。
PS:現在使用的是field校驗,是field錯誤級別,詳細參考:
struts2中action和field級別錯誤處理
-------------------------------------------------------------------------------------------------
PS:本博客文章,如果沒有注明是有“轉”字樣,屬于本人原創。如果需要轉載,務必
注明作者
和
文章的詳細出處地址
,否則不允許轉載,多謝合作!
posted on 2008-11-28 22:56
apple0668
閱讀(3733)
評論(2)
編輯
收藏
所屬分類:
struts2
評論:
#
re: 深入struts2中validation校驗框架的原理和使用(一) 2008-12-01 11:13 |
楊愛友
這個validation干嘛用的?能不能舉個具體例子?
回復
更多評論
#
re: 深入struts2中validation校驗框架的原理和使用(一)[未登錄]
2009-01-01 12:06 |
apple0668
validation,主要是在服務器端對數據進行校驗的。
回復
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
struts2設置開發模式控制臺錯誤信息
深入struts2中validation校驗框架的原理和使用(二)
深入struts2中validation校驗框架的原理和使用(一)
struts2中action和field級別錯誤處理
eclipse的第一個struts2插件:Alveole Studio MVC Web Project An eclipse plugin for Struts 2
ssh2中采用dao---service---action分層結構
struts2中head標簽的使用
struts2中命名空間的使用
Email:
chensp1230@163.com
歡迎交流
框架是告訴人們不該去做什么,而不是告訴人們該去做什么;容器是告訴人們該去做什么,而不是告訴人們不該去做什么!
<
2008年12月
>
日
一
二
三
四
五
六
30
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
31
1
2
3
4
5
6
7
8
9
10
留言簿
(10)
給我留言
查看公開留言
查看私人留言
我參與的團隊
深圳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報表(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)
友情鏈接
開源在線手冊
最新隨筆
1.?Ehcache集群方案
2.?MongoDB安裝手記
3.?任何人都可以重構<轉載>
4.?JDK6中JWS自帶webservice應用
5.?解決:Eclipse啟動tomcat 訪問不了 手動啟動可以訪問
6.?IntelliJ Idea10 常用快捷鍵
7.?Drools語法詳解<轉>
8.?eclipse3.4安裝drools插件手記
9.?Java日期時間運算
10.?java中使用功能強悍的正則表達式
搜索
最新評論
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相關的有用信息~~
--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解決手記(85539)
2.?系統學習hibernate之一:利用hibernate中的SchemaExport生成數據表(18639)
3.?eclipse的第一個struts2插件:Alveole Studio MVC Web Project An eclipse plugin for Struts 2(15690)
4.?Subversion之路---實現精細的目錄訪問權限控制<轉>(11306)
5.?IntelliJ Idea10 常用快捷鍵(9320)
評論排行榜
1.?Tomcat:IOException while loading persisted sessions: java.io.EOFException解決手記(62)
2.?eclipse的第一個struts2插件:Alveole Studio MVC Web Project An eclipse plugin for Struts 2(32)
3.?Tomcat啟動端口被占用異常處理(9)
4.?升級瑞星防火墻2008后,在myeclipse6.0中啟動tomcat遇到怪問題!(7)
5.?JDK6中JWS自帶webservice應用(6)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 apple0668
主站蜘蛛池模板:
伊人久久亚洲综合影院首页
|
久久国产精品萌白酱免费
|
亚洲国产人成网站在线电影动漫
|
国产男女猛烈无遮挡免费网站
|
99精品一区二区免费视频
|
特级做a爰片毛片免费看
|
亚洲国产精品ⅴa在线观看
|
亚洲日产2021三区
|
亚洲日韩中文字幕在线播放
|
免费a在线观看播放
|
性感美女视频免费网站午夜
|
日韩精品免费一级视频
|
国产午夜免费高清久久影院
|
亚洲阿v天堂在线2017免费
|
国产精品亚洲一区二区无码
|
亚洲大尺度无码无码专线一区
|
91成人免费福利网站在线
|
国产成人不卡亚洲精品91
|
亚洲性色AV日韩在线观看
|
亚洲人成电影网站
|
亚洲日韩乱码久久久久久
|
亚洲一区二区影院
|
亚洲一区二区三区首页
|
精品亚洲麻豆1区2区3区
|
在线观看亚洲人成网站
|
日韩亚洲AV无码一区二区不卡
|
亚洲国产精品嫩草影院在线观看
|
国产亚洲午夜精品
|
豆国产96在线|亚洲
|
亚洲av日韩综合一区二区三区
|
亚洲日韩精品无码专区
|
日本高清免费不卡在线
|
日本免费中文字幕在线看
|
日韩人妻无码免费视频一区二区三区
|
国内一级一级毛片a免费
|
免费看大黄高清网站视频在线
|
日韩免费a级在线观看
|
伊在人亚洲香蕉精品区麻豆
|
亚洲人成无码网WWW
|
亚洲无av在线中文字幕
|
亚洲国产综合91精品麻豆
|