为Action中的属性指定一个校验规则文件,文件名应该为<Action名字>-validation.xml的形式。java
<validators> <field name='action中的属性'> <field-validator type="该属性须要知足的规则"> <param name=""></param> <message>错误提示</message> </field-validator > </field> </validators>
当校验失败后,struts2也会返回“input”的Result,配置对应的Action返回试图。数据库
<action name="upd" class="com.shcredit.controller.TestAction"> <result name="input">/jsp/appkind/appkindupd.jsp</result> <result name="success" type="redirect">qry.action?flag=1</result> </action>
使用客户端进行校验首先要将输入页面的表单元素改成使用Struts2标签<s:form>来生成表单,为该<s:form>元素增长validate="true"属性。app
将请求页面放置于WEB-INF/content路径下,让浏览者访问资源以前先通过它的核心Filter,在struts.xml中增长配置:jsp
<action name="*"> <result>/WEB-INF/content/{1}.jsp</result> </action>
启用客户端校验的表单action和namespace要分开写。将原来<s:form>中的action="/test/validate"写成namespace="test",action="validate"。ide
客户端校验只支持以下几种校验器:ui
required validator(必填校验器);this
requiredstring validator(必填字符串校验器);url
stringlength validator(字符串长度校验器);spa
regex validator(表达式校验器);code
email validator(邮件校验器);
url validator(网址校验器);
int validator(整数校验器);
double validator(双精度校验器);
该方式最为灵活,能够处理许多规则没法校验的状况,好比name值在数据库中惟一性,文件校验等。
1)重写ActionSupport中的validate()方法;
@Override public void validate() { this.clearFieldErrors(); // 一、检查用户名称,不能为空、不能有特殊字符 if (!ParameterValidate.validateNull(appType.getTypeName())) { this.addFieldError("appTypeName_error", "应用类别名称不能为空!"); } else if (ParameterValidate.filterCharacter(appType.getTypeName())) { this.addFieldError("appTypeName_error", "应用类别名称不能包含特殊字符!"); } }
一旦校验未经过,会经过该action的"input"试图将fieldError中的错误返回值对应JSP中的<s:fielderror>中。
2)重写validateXxx()方法
为了实现校验指定逻辑的功能,struts2中的action提供了validateXxx()方法,其中Xxx便是Action对应的处理逻辑方法。