读书人

Validator应验框架 简单应用

发布时间: 2012-11-16 14:12:14 作者: rapoo

Validator验证框架 简单应用

Validator框架可以在XML文件中配置验证规则和验证对象。因此,使用Validator框架可以无需在ActionForm的子类中覆盖validate方法就可以很方便地验证客户端的提交数据。由于Validator框架内置了很多预定义的验证机制,如验证某个属性是否存在,验证EMail是否合法等。所以在一般情况下,只需要配置XML文件就可以满足我们的验证需求。

在使用Validator框架时,就会发现这种方式要比直接使用validate方法进行验证会给我们带来如下的好处:

1.? 更容易维护。 由于验证信息可以被放置在同一个配置文件中,因此,我们可以更容易地来维护这些验证信息。

2.? 标准化。由于很多简单的验证都是相同的。如用户名和密码都要求由字母、数字以及下划下组成。如果将这些验证都写在validate方法中,对这些验证进行标准化非常困难。而在Validator框架中的这些验证机制都是预先定义的,因此,标准化相同的验证对于Validator框架来说将是一件非常轻松的事。

3.? 避免重造轮子。虽然一些验证很简单,但如果想正确实现它们也是非常困难的。一个典型的例子是验证EMail地址的格式。如果这个验证要想完美无缺,就必须按着RFC-2822规范的要求来验证EMail地址。而如果我们使用Validator框架,就无需再重造轮子来验证EMail地址了。

4.? 减少重复代码的数量。由于Validator框架提供了很多预定义的验证,因此,我们可以避免自己写很多重复的代码进行验证。当然,我们也可以将大量使用的验证封装在类的方法中,这些虽然可以避免大量的重复劳动,但这就意味着我们团队的新成员要使用这些被封装的验证方法之前必须先学习它们。而最糟糕的情况是很多开发人员可能会忘记使用这些由其他成员实现的验证库,而自己重新编写具有同样功能的验证库。当然,这一切如果使用Validator框架就都可以得到解决。

其中<set-property>元素设置了插件中使用的pathnames属性的值。在pathnames属性值中包含了两个xml文件。

(1)validator-rules.xml:在这个文件中声明了Validator框架的预定义验证。这个文件可以在Struts的发行包的lib目录中可以找到这个文件。在使用MyEclipse为Web工程添加Struts功能后,会自动将这个文件加到WEB-INF目录中。

(2)validator.xml:这个文件定义了要验证的对象。实际上,在这个文件中,包含了一个或多个ActionForm的子类及其要验证的属性和验证规则。因此,这个文件就相当于validate方法。在Validator框架中,可以有多个定义验证对象的xml文件(可以将不同的ActionForm的子类分散到不同的xml文件中),中间用逗号(,)隔开,如下面的代码所示:
<!--[endif]-->

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><plug-in?className="org.apache.struts.validator.ValidatorPlugIn">
??? <set-property?property="pathnames" value="/WEB-INF/validator-rules.xml,?/WEB-INF/validator1.xml,
???????????????????????????????????????????? /WEB-INF/validator2.xml, /WEB-INF/validator3.xml"?/>
</plug-in>?????

在<samples工程目录>\src\actionform目录中建立一个FirstValidatorForm.java文件,代码如下:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->??package?actionform;
??import?org.apache.struts.validator.ValidatorForm;
??public?class?FirstValidatorForm?extends?ValidatorForm??//?必须从ValidatorForm继承
??{
??????private?String?name;
??????private?String?age;
??????private?String?email;
??????public?String?getName()
??????{
??????????return?name;
??????}
??????public?void?setName(String?name)
??????{
??????????this.name?=?name;
??????}
??????public?String?getEmail()
??????{
??????????return?email;
??????}
??????public?void?setEmail(String?email)
??????{
??????????this.email?=?email;
??????}
??????public?String?getAge()
??????{
??????????return?age;
??????}
??????public?void?setAge(String?age)
??????{
??????????this.age?=?age;
??????}
??}

其中firstValidator.jsp是用户录入信息的界面,也是显示错误信息的界面。

【第4步】建立firstValidator.jsp
??? 在Web根目录建立一个firstValidator.jsp文件,代码如下:
<!--[endif]-->

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->??<%@?page?pageEncoding="GBK"%>
??<%@?taglib?uri="http://struts.apache.org/tags-html"?prefix="html"%>
??<html>
????<head>
??????<title>第一个Validator程序</title>
????</head>
????<body>
??????<html:form?action="firstValidator"?>
?????????姓??名:
<html:text?property="name"?/>  <font?color="red"><html:errors?property="name"/></font><p>
?????????年??龄:
<html:text?property="age"/>  <font?color="red"><html:errors?property="age"/></font><p>
???????EMail:
<html:text?property="email"/>  <font?color="red"><html:errors?property="email"/></font><p>
??????????????<html:submit?value="提交"/>
??????</html:form>??
????</body>
??</html>

<field>元素用来定义某个属性的约束条件,如第一个<field>元素定义了name属性必须存在(required)、必须要满足最小长度(minlength)和最大长度(maxlength)以及还要通过mask所指的正则表达式的验证。

<msg>元素用来定义出错信息在属性文件中的Key(所有的出错信息都在属性文件中)。<arg>元素用来向出错信息中的参数传递参数值。<var>元素用来定义变量名和变量值。

【第6步】在ErrorDescription.properties文件中添加错误信息

??? 打开ErrorDescription.properties文件,在文件的后面添加如下的内容:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->??error.name.blank?=?姓名不能为空
??error.name.minLength?=?姓名的长度不能小于{0}
??error.name.maxLength?=?姓名的长度不能大于{0}
??error.name.alphanum?=?姓名必须由字母和数字组成
??error.age.blank?=?年龄不能为空
??error.age.integer?=?年龄必须为数字
??error.age.intRange?=?年龄必须在{0}和{1}之间

? 启动Tomcat,在IE中输入如下的URL来测试程序:

? ? http://localhost:8080/samples/%20firstValidator.jsp

??? 在输入一些错误信息后,点击“提交”按钮,将出现类似下图的效果。

?

读书人网 >软件架构设计

热点推荐