如果要使用Struts2的验证框架,首先要开启这个拦截器。在文档中是这样介绍的:
默认的拦截器堆栈defaultStack已经在开启验证。在创建自己的interceptor-stack时一定要包括validation和workflow拦截器。
Xml代码
<interceptor-stack name="defaultStack"> ... <interceptor-ref name="validation"> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref> <interceptor-ref name="workflow"> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref> </interceptor-stack>
添加此属性validate="true"之后,服务器返回此页面的时候就会生成一个js文件进行校验,那么这里就是客户端校验了,但是客户端支持的校验器只有几种。
<%@ page contentType="text/html; charset=GBK" language="java" %> <%@ taglib prefix="s" uri="/struts-tags"%> <html> <head> <title>register</title> </head> <body> <s:form action="login" validate="true"> <s:textfield name="username" label="用户名"/> <s:textfield name="pass" label="密码"/> <s:textfield name="repass" label="确认密码"/> <s:textfield name="age" label="年龄"/> <s:textfield name="high" label="身高"/> <s:textfield name="email" label="邮箱"/> <s:textfield name="website" label="个人主页"/> <s:textfield name="birthday" label="生日"/> <s:submit/> </s:form> </body> </html>
Xml代码
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators> <!-- required必填校验器 --> <field name="repass"> <field-validator type="required"> <!-- 校验前去掉name属性的前后空格 --> <param name="trim">true</param> <message>必须再填一次密码!</message> </field-validator> </field> <!-- requiredstring必填字串校验器和stringlength长度校验器 --> <field name="username"> <field-validator type="requiredstring"> <!-- 校验前去掉name属性的前后空格 --> <param name="trim">true</param> <message>%{getText("validator.error.required", "姓名")}</message> </field-validator> <field-validator type="stringlength"> <param name="minLength">0</param> <param name="maxLength">15</param> <message>长度必须在0和15之间</message> </field-validator> </field> <!-- regex正则表达式校验器 --> <field name="pwd"> <field-validator type="requiredstring" short-circuit="true"> <param name="trim">true</param> <message>请输入密码</message> </field-validator> <field-validator type="regex"> <param name="expression"><![CDATA[(\w{4,25})]]></param> <message>您输入的密码只能是字母和数组,且长度必须在4到25之间</message> </field-validator> </field> <!-- int整数校验器 --> <field name="age"> <field-validator type="int"> <param name="min">1</param> <param name="max">100</param> <message>年龄必须是${min}到${max}之间的整数</message> </field-validator> </field> <!-- double双精度浮点校验器 --> <field name="high"> <field-validator type="double"> <param name="min">1.0</param> <param name="max">2.3</param> <message>身高必须是${min}到${max}之间的小数</message> </field-validator> </field> <!-- date日期校验器 --> <field name="birthday"> <field-validator type="date"> <param name="min">1900-01-01</param> <param name="max">2050-01-01</param> <message>${getText("birthday.range")}</message> </field-validator> </field> <!-- email邮件地址校验器 --> <field name="email"> <field-validator type="email"> <message>邮箱格式不对</message> </field-validator> </field> <!-- url网址校验器 --> <field name="website"> <field-validator type="url"> <message>请填写正确的网址</message> </field-validator> </field> </validators>
但是在生成出的js文件中并没有对date类型的字段校验。
可见Struts2中并不是所有的服务器端校验都可以转换成客户端校验。客户端校验仅仅支持如下几种校验器:
required validator 必填校验器
requiredstring validator 必填字符串校验器
stringlength validator 字符串长度校验器
regex validator 表达式校验器
email validator 邮件校验器
url validator 网址校验器
int validator 整数校验器
double validator 双精度数校验器
struts2.3.4内置的13种校验器:
xml代码:
conversion validator
date validator
double validator
email validator
expression validator
fieldexpression validator
int validator
regex validator
required validator
requiredstring validator
stringlength validator
url validator
visitor validator