Struts简单的Validator例子

作者在 2007-12-20 09:39:38 发布以下内容

      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 Name

prompt.password=User Password

errors.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。现在可以运行一下试试效果了。不同的情况给出的错误信息不同,使用是很方便的

默认分类 | 阅读 1825 次
文章评论,共1条
hwoarangzk(作者)
2008-05-19 10:06
1
有可能你的Struts包没有导入。onsubmit, html:form, action都说不认识或未定义
游客请输入验证码