关于在struts中使用validator,经过半天实践,有了些许体会(以struts1.2.7为例子)。
步骤如下:
(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中加上
(5)建立一个form-bean,用MyEclipse很快的,不知道怎么做的话就此打住,去学好基本功。我用一个loginForm做例子,有2个属性:name和password。
(6)打开validation.xml,去掉<form-validation>节中的所有内容,新加入
(7)在要进行验证的那个form中加入
(8)ok,发布后就可以看到效果了,是在客户端进行验证,错误是弹出式显示的。
注意:ApplicationResources.properties中属性值定义成中文会使得验证失效,具体原因是jsp页面需要加上
(9)客户端验证还是不怎么保险,ok,现在弄个服务器端验证。
(10)上面用MyEclipse定义form-bean的时候,自动生成了一个ActionForm,在struct-config.xml中,可以在form-bean一节中找到type属性指向这个ActionForm,把它改一下,变成:
再到相应的jsp页面把onsubmit部分删除,此外,还要删除<html:javascript 部分。
(11)ok,发布后就可以看效果了,验证部分的代码,客户端是看不到了,错误信息直接跟在输入框后面,笔弹出式的要好,问题就是服务器端的负担加重了,但是我认为这是必要的,客户端的验证不保险。
除了上面的2种方法外,在struts中应用validator还有方法,ActionForm还可以继承别的类实现验证,这里就不说了,上面的2种是比较简单的。
步骤如下:
(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种是比较简单的。