struts2的表单验证有两种方式[两种方式都是同一个数据验证拦截器(validate)在作用]:
1.手工验证:自己手动写一个validate()方法,实现数据验证。
前提:此action继承ActionSupport或者实现Validateable, ValidationAware接口
该方法中,写数据检查代码,如果有错误就把错误信息添加到值栈中。当值栈中的错误信息不为空,struts2会自动返回一个input的结果
validate()对Action里的全部方法做数据校验
如果只想对Action里的某xxx方法做数据校验 ,写一个validateXxx()方法
jsp页面配合<s:Filederror/>和<s:actionerror/>(表达式验证时用此显示)
2.使用xml配置文件,实现表单验证
数据验证拦截器,当存在验证规则的xml文件时,自动读取里面的验证规则,来对字段进行验证,如果验证不通过则返回input跟类型转换过程一致。
前提:要对某个action进行数据验证,那么xml文件名一定是action名-validation.xml,并且和action同一目录。
注意:使用表达式验证,产生的错误,属于actionerror 使用<s:actionerror/>输出此类型的错误消息。
常用的使用xml配置文件,实现表单验证
<validators>
<!-- 字段的验证规则 -->
<!-- 年龄字段的校验规则 -->
<field name="user.age">
<field-validator type="int">
<param name="min">20</param>
<param name="max">30</param>
<message>年龄必须在${min} 到 ${max} 之间</message>
</field-validator>
</field>
<!-- 用户名不能为空 , 长度校验 -->
<field name="user.username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>用户名不能为空</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">12</param>
<param name="trim">true</param>
<message>用户名必须在6-12位之间</message>
</field-validator>
</field>
<!-- 电子邮件验证 -->
<field name="user.email">
<field-validator type="email">
<message>电子邮件必须符合邮件规则</message>
</field-validator>
</field>
<!-- 密码长度校验 -->
<field name="user.password">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>密码不能为空</message>
</field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">12</param>
<param name="trim">true</param>
<message>密码长度必须在6-12位之间</message>
</field-validator>
</field>
<!-- 使用正则,身份证验证 -->
<field name="user.idCard">
<field-validator type="regex">
<param name="regex"><![CDATA[^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$]]></param>
<message>身份证必须符合规则</message>
</field-validator>
</field>
<!-- 使用表达式校验,来验证密码和确认密码一致 -->
<validator type="expression">
<param name="expression"><![CDATA[user.password==password2]]></param>
<message>密码和确认密码必须相同</message>
</validator>
</validators>