Struts 2.x权威指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.8.2 使用Struts2的校验框架

上面的输入校验是通过重写ActionSupport类的validate方法实现的,这种方法虽然不错,但需要大量重写的validate方法——毕竟,重复书写相同的代码不是一件吸引人的事情。

Struts 2允许通过定义配置文件来完成数据校验。Struts 2的校验框架实际上是基于XWork的validator框架。

下面还是使用原来的Action类(即不重写validate方法),但增加一个校验配置文件,校验配置文件通过使用Struts 2已有的校验器来完成对表单域的校验。Struts 2提供了大量的数据校验器,包括表单域校验器和非表单域校验器两种。

本应用主要使用了 requiredstring 校验器,该校验器是一个必填校验器——指定某个表单域必须输入。

下面是本应用的校验规则文件。

程序清单:codes\02\2.8\validate2\WEB-INF\src\org\crazyit\struts2qs\action\LoginAction-validation.xml

<?xml version="1.0" encoding="GBK"?>
<!-- 指定校验规则文件的DTD信息 -->
<!DOCTYPE validators PUBLIC
    "-//OpenSymphony Group//XWork Validator 1.0.3//EN"
    "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<!-- 校验规则定义文件的根元素 -->
<validators>
    <!-- 校验第一个表单域:username -->
    <field name="username">
          <!-- 该表单域必须填写 -->
          <field-validator type="requiredstring">
                <!-- 如果校验失败,则显示user.required对应的信息 -->
                <message key="user.required"/>
          </field-validator>
    </field>
    <!-- 校验第二个表单域:password -->
    <field name="password">
          <field-validator type="requiredstring">
                <!-- 如果校验失败,则显示pass.required对应的信息 -->
                <message key="pass.required"/>
          </field-validator>
    </field>
</validators>

定义完该校验规则文件后,该文件的命名应该遵守如下规则。

ActionName-validation.xml:其中ActionName就是需要校验的Action类名。

因此,上面的校验规则文件应该命名为“LoginAction-validation.xml”,且该文件应该与Action类的class文件位于同一个路径下。将上面的校验规则文件放在WEB-INF/classes/lee路径下即可。增加该检验规则文件后,LoginAction不必重写validate()方法也可完成输入校验。

当然,在struts.xml文件的Action定义中,一样需要为input逻辑视图指定物理视图资源,将input逻辑视图映射到loginForm.jsp页面。

如果不输入用户名、密码而提交表单,将再次看到如图2.14所示的界面。在这种校验方式下,无须书写校验代码,只需要通过配置文件指定校验规则即可,因此提供了更好的可维护性。