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
阅读(3728)
评论(2)
编辑
收藏
所属分类:
struts2
评论:
#
re: 深入struts2中validation校验框架的原理和使用(一) 2008-12-01 11:13 |
杨爱友
这个validation干嘛用的?能不能举个具体例子?
回复
更多评论
#
re: 深入struts2中validation校验框架的原理和使用(一)[未登录]
2009-01-01 12:06 |
apple0668
validation,主要是在服务器端对数据进行校验的。
回复
更多评论
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
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年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)
给我留言
查看公开留言
查看私人留言
我参与的团队
深圳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解决手记(85512)
2. 系统学习hibernate之一:利用hibernate中的SchemaExport生成数据表(18631)
3. eclipse的第一个struts2插件:Alveole Studio MVC Web Project An eclipse plugin for Struts 2(15672)
4. Subversion之路---实现精细的目录访问权限控制<转>(11271)
5. IntelliJ Idea10 常用快捷键(9305)
评论排行榜
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)