这节介绍如何在SSH框架中使用Validator框架,Validator框架采用基于xml文件来配置验证规则,它主要依赖两个jar包:commons-validator-1.3.0.jar和oro-2.0.8.jar,要在SSH使用Validator框架,必须把这两个jar包引用进来,其实Struts框架已包含这两个jar包,所以我们不用再单独引入了。
要在SSH框架中使用Validator,更确切的说是在Struts框架中使用,可以采用插件机制把Validator加入到框架,这需要修改原来的struts-config.xml文件,增加配置ValidatorPlugIn插件,代码如下:
<
plug-in
className
=
"org.apache.struts.validator.ValidatorPlugIn"
>
<
set-property
property
=
"pathnames"
value="
/org/apache/struts/validator/validator-rules.xml,
/WEB-INF/validation.xml
"
/>
<
set-property
property
=
"stopOnFirstError"
value
=
"true"
/>
</
plug-in
>
这样当应用启动时,
Struts
框架就会加载
ValidatorPlugIn
插件。
validator-rules.xml
文件是Validator框架自带的,它定义了一些常有的校验规则,而
validation.xml是我们自己定义的,它针对某个应用,内容如下:
<?
xml
version
=
"1.0"
encoding
=
"iso-8859-1"
?>
<!
DOCTYPE
form-validation
PUBLIC
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.3.0//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_3_0.dtd"
>
<
form-validation
>
<
formset
>
<
form
name
=
"registerForm"
>
<
field
property
=
"register.username"
depends
=
"required"
>
<
arg
key
=
"register.username"
position
=
"0"
/>
</
field
>
<
field
property
=
"register.password"
depends
=
"required,minlength"
>
<
arg
key
=
"register.password"
position
=
"0"
/>
<
arg
name
=
"minlength"
key
=
"${var:minlength}"
resource
=
"false"
position
=
"1"
/>
<
var
>
<
var-name
>
minlength
</
var-name
>
<
var-value
>
6
</
var-value
>
</
var
>
</
field
>
<
field
property
=
"register.email"
depends
=
"required,email"
>
<
arg
key
=
"register.email"
position
=
"0"
/>
</
field
>
</
form
>
</
formset
>
</
form-validation
>
form
元素的
name
属性指定要进行验证的表单,
field
元素的
property
属性指定要验证属性,
depends
定义了验证方式,在这里,我们定义了
username
属性不能为空,
password
属性不能为空,并且最小长度不能小于
6
,
email
属性必须是合法的邮件地址。定义验证方式之后,我们还必须修改资源文件
registermessages.properties
,增加以下内容:
# Errors
errors.header=
<h3><font
color="red">Validation
Error</font></h3>You
must
correct
the
following
error(s)
before
proceeding
:
errors.required=
{0}
is
required.
errors.minlength=
{0}
can
not
be
less
than
{1}
characters.
errors.email
=
{0}
is
an
invalid
e-mail
address.
这资源文件中
{0}
对应着
<
arg
key
=
""
position
=
"0"
/>
,
{1}
对应着
<
arg
key
=
""
position
=
"1"
/>
,
以此类推,如果有验证错误产生,将用
key
的值替换
{n}
此外,我们还要修改
struts-config.xml
文件,修改内容见粗体:
//
把原来的
DynaActionForm
改为
DynaValidatorForm
<
form-beans
>
<
form-bean
name
=
"registerForm"
type
=
"org.apache.struts.validator.DynaValidatorForm"
>
<
form-property
name
=
"register"
type
=
"test.register.entity.Register"
/>
</
form-bean
>
</
form-beans
>
//
把原来的
validate
=
"false"
改为
validate
=
"true"
<
action-mappings
>
<
action
name
=
"registerForm"
path
=
"/register"
scope
=
"request"
type
=
"test.register.action.RegisterAction"
validate
=
"true"
input
=
"/register.jsp"
>
<
forward
name
=
"success"
path
=
"/registerSuccess.jsp"
/>
</
action
>
</
action-mappings
>
修改错误显示的样式,我们在
register.jsp
中,替换原来
<html/errors>
为
<
logic:messagesPresent
>
<
bean:message
key
=
"errors.header"
/>
<
ul
>
<
html:messages
id
=
"error"
>
<
li
><
bean:write
name
=
"error"
/></
li
>
</
html:messages
>
</
ul
><
hr
/>
</
logic:messagesPresent
>
注意在页面上加入
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
这样,我们运行程序,校验失败的效果如图:
![](https://p-blog.csdn.net/images/p_blog_csdn_net/jacky9881/1218afbd66724ae8affa8bae412fafac.jpg)