Validator框架是Struts自带的一个框架,能够进行数据输入的验证,能够针对不同的输入情况给出不同的错误提示信息,使用很方便。今天写个简单的Validator例子,根据昨天的那个登录例子稍作修改即可。
首先,修改index.jsp,加入出错信息的struts标签。
index.jsp:
<%@
page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><%@
taglib uri="/tags/struts-html" prefix="html" %>
<!
DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><
html><
head><
meta. http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><
title>Index Page</title></
head><
body> <b>Welcome!</b> <html:form. action="/login.do" method="post">Username:
<html:text property="username" /><html:errors property="username" /><br>Password:
<html:password property="password" /><html:errors property="password" /><br> <html:submit value="Submit" /> <html:reset value="Reset" /><br/> </html:form></
body></
html>这里,在Username和Password后面多了两个errors标签,里面有property属性,稍后说明。
然后,在struts-config.xml里面加入使用Validator的语句。
struts-config.xml:
<?
xml version="1.0" encoding="UTF-8"?><!
DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"><
struts-config> <data-sources /> <form-beans> <form-bean name="loginForm" type="src.LoginForm" /> </form-beans> <global-exceptions /> <global-forwards /> <action-mappings> <action path="/login" name="loginForm" input="/index.jsp" validate="true" type="src.LoginAction" > <forward name="success" path="/success.jsp" /> <forward name="failure" path="/failure.jsp" /> </action> </action-mappings> <message-resources parameter="src.ApplicationResource" /> <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validation.xml,/WEB-INF/validator-rules.xml" /> </plug-in></
struts-config>这里,我们在<message-resources>后面加上了<plug-in>,这个说明了我们要使用Validator框架。注意,在<action>里面需要加上validate=true。
然后,我们需要将struts包解压后的validator-rules.xml文件放到WEB-INF下面,不要忘了还有commons-validator.jar放到lib里面。同时,在WEB-INF下,我们需要自己编写一个validation.xml来写自己的验证。
validation.xml:
<?
xml version="1.0" encoding="UTF-8"?><!
DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN" "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd"><
form-validation> <formset> <form. name="loginForm"> <field property="username" depends="required"> <arg key="prompt.username" /> </field> <field property="password" depends="required,minlength"> <arg0 key="prompt.password" /> <arg1 name="minlength" key="${var:minlength}" resource="false"/> <var> <var-name>minlength</var-name> <var-value>5</var-value> </var> </field> </form> </formset></
form-validation>这个文件中,<form. name>指定了需要验证的Form的名字,里面的属性即username和password需要验证。depends=required使用了一个叫required的验证器,他的主要作用就是检验输入是否为空。以username为例,如果为空的话,将返回给errors.required一个参数,参数名为prompt.username,内容放在ApplicationResource资源文件里面(这个文件我们待会儿修改)。errors.required就是使用required验证器时,指定返回消息的变量。再看password,这里多了一个叫minlength的验证器。这个验证器的作用是检测属性的长度是否超过最小值,没有超过则返回出错信息。<arg1 name key>,中,name是指下面的var-name,key就是var-value了。同样,errors.minlength是使用minlength验证器时,存放返回消息的地方。
下面,我们修改ApplicationResource.properties:
prompt.username=
User Nameprompt.password=
User Passworderrors.required=
{0} is required!errors.minlength=
{0} can't be less than {1} characters!以password为例,<html:errors property="password">指定了password,那么validator就会在validation里面找field为password的那一项。如果输入为空,那么返回arg0(arg默认是arg0),里面的消息内容由prompt.password指定,同时,页面上的html:errors property="password"将会根据使用的验证器来返回出错消息,这里将返回User Password is required! {}加数字就是返回的消息由arg指定。{0}返回arg或arg0,{1}返回arg1,以此类推。
LoginAction不用作修改的,LoginForm需要继承自DynaValidatorForm而非ActionForm了,然后可以将validate()删掉了,因为我们用了Validator。现在可以运行一下试试效果了。不同的情况给出的错误信息不同,使用是很方便的