步骤如下:
(1)下载struts-1.2.7.zip,解压后,将webapps中的struts-examples.war解开,在WEB-INF文件夹中找到validator-rules.xml,还有WEB-INF\validator中的validation.xml。
(2)我用的是eclipse3.1.1+MyEclipse4.0.3,在eclipse中新建一个myeclipse的web project,再add struts capabilities,选struts 1.2,把相应的struts框架需要的文件复制到web project中。
(3)将步骤1中找到的2个xml文件复制到web project的WEB-INF文件夹下,然后在struts-config.xml中加上
<
plug
-
in className
=
"
org.apache.struts.validator.ValidatorPlugIn
"
>
< set - property property = " pathnames " value = " /WEB-INF/validator-rules.xml,/WEB-INF/validation.xml " />
</ plug - in >
(4)打开validator-rules.xml,可以看到在步骤3要添加的一段内容,下面还有一段如下:
< set - property property = " pathnames " value = " /WEB-INF/validator-rules.xml,/WEB-INF/validation.xml " />
</ plug - in >
# Struts Validator Error Messages
errors.required = { 0 } is required.
errors.minlength = { 0 } can not be less than { 1 } characters.
errors.maxlength = { 0 } can not be greater than { 1 } characters.
errors.invalid = { 0 } is invalid.
errors. byte = { 0 } must be a byte .
errors. short = { 0 } must be a short .
errors.integer = { 0 } must be an integer.
errors. long = { 0 } must be a long .
errors. float = { 0 } must be a float .
errors. double = { 0 } must be a double .
errors.date = { 0 } is not a date.
errors.range = { 0 } is not in the range { 1 } through { 2 }.
errors.creditcard = { 0 } is an invalid credit card number.
errors.email = { 0 } is an invalid e - mail address.
把这段复制到classes里的ApplicationResources.properties文件中。
errors.required = { 0 } is required.
errors.minlength = { 0 } can not be less than { 1 } characters.
errors.maxlength = { 0 } can not be greater than { 1 } characters.
errors.invalid = { 0 } is invalid.
errors. byte = { 0 } must be a byte .
errors. short = { 0 } must be a short .
errors.integer = { 0 } must be an integer.
errors. long = { 0 } must be a long .
errors. float = { 0 } must be a float .
errors. double = { 0 } must be a double .
errors.date = { 0 } is not a date.
errors.range = { 0 } is not in the range { 1 } through { 2 }.
errors.creditcard = { 0 } is an invalid credit card number.
errors.email = { 0 } is an invalid e - mail address.
(5)建立一个form-bean,用MyEclipse很快的,不知道怎么做的话就此打住,去学好基本功。我用一个loginForm做例子,有2个属性:name和password。
(6)打开validation.xml,去掉<form-validation>节中的所有内容,新加入
<
formset
>
< form name = " loginForm " >
< field property = " name " depends = " required " >
< arg0 key = " label.Name " ></ arg0 >
</ field >
< field property = " password " depends = " email " >
< arg0 key = " label.password " ></ arg0 >
</ field >
</ form >
</ formset >
label.Name和label.password在ApplicationResources.properties文件中有定义。
< form name = " loginForm " >
< field property = " name " depends = " required " >
< arg0 key = " label.Name " ></ arg0 >
</ field >
< field property = " password " depends = " email " >
< arg0 key = " label.password " ></ arg0 >
</ field >
</ form >
</ formset >
(7)在要进行验证的那个form中加入
onsubmit
=
"
return validateLoginForm(this)
"
关于后面这个validateLoginForm是validate+
ActionForm名称。再在要验证的页面加入
<
html:javascript formName
=
"
loginForm
"
/>
这里的formName,就是在validation中定义的<form name="loginForm">。
(8)ok,发布后就可以看到效果了,是在客户端进行验证,错误是弹出式显示的。
注意:ApplicationResources.properties中属性值定义成中文会使得验证失效,具体原因是jsp页面需要加上
<%
@ page language
=
"
java
"
contentType
=
"
text/html; charset=UTF-8
"
%>
最重要的是那个charset。
(9)客户端验证还是不怎么保险,ok,现在弄个服务器端验证。
(10)上面用MyEclipse定义form-bean的时候,自动生成了一个 ActionForm,在struct-config.xml中,可以在form-bean一节中找到type属性指向这个 ActionForm,把它改一下,变成:
<
form
-
bean name
=
"
loginForm
"
type
=
"
org.apache.struts.validator.DynaValidatorForm
"
>
< form - property name = " name " type = " java.lang.String " ></ form - property >
< form - property name = " password " type = " java.lang.String " ></ form - property >
</ form - bean >
这样,
执行的时候会动态生成
ActionForm,可以把原来的ActionForm删除了。然后,修改相应的Action类,里面自己定义的ActionForm要换成DynaValidatorForm,取属性的方法也变为(form).get("属性名称")。< form - property name = " name " type = " java.lang.String " ></ form - property >
< form - property name = " password " type = " java.lang.String " ></ form - property >
</ form - bean >
再到相应的jsp页面把onsubmit部分删除,此外,还要删除<html:javascript 部分。
(11)ok,发布后就可以看效果了,验证部分的代码,客户端是看不到了,错误信息直接跟在输入框后面,笔弹出式的要好,问题就是服务器端的负担加重了,但是我认为这是必要的,客户端的验证不保险。
除了上面的2种方法外,在struts中应用validator还有方法, ActionForm还可以继承别的类实现验证,这里就不说了,上面的2种是比较简单的。