Struts 2提供了基于验证框架的输入校验,在这种校验方式下,所有的输入校验只需要编写简单的配置文件,Struts 2的验证框架将会负责进行服务器校验和客户端校验。
下面应用将会示范如何利用Struts 2的校验框架进行输入校验。使用Struts 2的校验框架进行校验无须对程序代码进行任何改变,只需编写校验规则文件即可,校验规则文件指定每个表单域应该满足怎样的规则。
本应用所使用的表单代码如下。
程序清单:codes\04\4.2\basicValidate\regist.jsp
上面粗体字代码定义了4个表单域,这4个表单域分别对应name、pass、age和birth 4个请求参数,假设本应用要求这4个请求参数满足如下规则:
Øname和pass只能是字母和数组,且长度必须在4到25之间。
Ø年龄必须是1到150之间的整数。
Ø生日必须在1900-01-01和2050-02-21之间。
下面是该请求对应的Action代码。
程序清单:codes\04\4.2\basicValidate\WEB-INF\src\org\crazyit\app\action\RegistAction.java
public class RegistAction extends ActionSupport
{
//该请求包含的4个请求参数
private String name;
private String pass;
private int age;
private Date birth;
//此处省略了4个属性的setter和getter方法
...
}
在上面的Action中,我们仅提供了4个属性来封装用户的请求参数,并为这4个参数提供了对应的setter和getter方法。该Action继承了ActionSupport类,因此它也包含了一个execute方法,且该方法直接返回success字符串,这个Action不具备任何输入校验的功能。
但通过为该Action指定一个校验规则文件后,即可利用Struts 2的输入校验功能对该Action进行校验。下面是本应用所使用的输入校验文件。
程序清单:codes\04\4.2\basicValidate\WEB-INF\src\org\crazyit\app\action\RegistAction-validation.xml
/p>
"-//OpenSymphony Group//XWork Validator 1.0.3//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
true
必须输入名字
您输入的用户名只能是字母和数字
,且长度必须在4到25之间
true
必须输入密码
您输入的密码只能是字母和数字
,且长度必须在4到25之间
1
150
年纪必须在1到150之间
1900-01-01
2050-02-21
生日必须在${min}到${max}之间
校验规则文件的根元素是元素,元素可包含多个或元素,它们都用于配置校验规则,区别是:是字段校验器的配置风格,而是非字段校验器的配置风格。关于这两个元素配置方式后面还有更详细的介绍。
Struts 2的校验文件规则与Struts 1的校验文件设计方式不同,Struts 2中每个Action都有一个校验文件,因此该文件的文件名应该遵守如下规则:
-validation.xml
前面的Action名是可以改变的,后面的-validation.xml部分总是固定的,且该文件应该被保存在与Action class文件相同的路径下。例如,本应用的Action class文件保存在WEB-INF/classes/org/crazyit/ app/action路径下,故该校验文件也应该保存在该路径下。
与类型转换失败相似的是,当输入校验失败后,Struts 2也是自动返回名为“input”的Result,因此需要在struts.xml文件中配置名为“input”的Result。下面是本应用的struts.xml文件中Action的配置片段。
程序清单:codes\04\4.2\basicValidate\WEB-INF\src\struts.xml
/regist.jsp
/show.jsp
增加了上面的修改之后,这样就为该Action对应的各字段添加了校验规则,而且指定了校验失败后应用会跳转到regist.jsp页面,接下来可以在regist.jsp页面中添加来输出错误提示。
剩下部分无须任何修改,系统自动会加载该文件,当用户提交请求时,Struts 2的校验框架会根据该文件对用户请求进行校验。如果浏览者的输入不满足校验规则,将可以看到如图4.12所示的界面。
图4.12使用校验框架的效果
从图4.12中可以看出,这种基于Struts 2校验框架的校验方式完全可以替代手动校验,而且这种校验方式的可重用性非常高,只需要在配置文件中配置校验规则,即可完成数据校验,无须用户书写任何的数据校验代码。
类型转换失败的提示信息、输入校验失败的提示信息都被封装成FieldError,并被放入Action Context中,而且校验失败时都将返回input逻辑视图名,且都使用标签来输出错误提示信息。如果开发者使用了Struts 2的表单标签来生成表单,那么表单标签会自动输出错误提示,如图4.12所示。
提示: