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所示的界面。在这种校验方式下,无须书写校验代码,只需要通过配置文件指定校验规则即可,因此提供了更好的可维护性。