(1)使用JavaScript完成客户端校验:客户端进行,速度快
(2)在Action中使用Validate方法进行校验 例如
public void validate() {
//检查生日不能为空
if(birthday==null || birthday.after(new Date()) ) {
//写入校验信息
addFieldError(“birthday”, “生日日期不正确!”) ; //采用该方法将数据校验异常信息加入到ActionContext中
}
}
采用该种方法,struts2会自动将异常信息显示在相应的输入位置上,并用红色提示用户重新输入。
实际上,<s:form>会自动显示该表单校验的异常信息,要显式异常信息,可以在页面中加入<s:fielderror />标签,该标签将会显示ActionContext中所有的异常信息。
(3)在Action中使用validateXxx()方法对不同的业务处理方法进行数据输入校验
(4)基于框架的输入校验
定义:struts提供了一种基于框架文件的输入校验方式,将校验规则保存在特定的框架文件中,这样可以是输入校验同Action实现了分离,提供系统的维护性。
用法:建立一个特定的校验规则文件,为xml格式的配置文件,命名规则为
Action名称-validation.xml
保存在同Action实现类相同的目录下。
格式:
(i)字段校验格式如下
<validators>
<field name= “校验字段名称”>
<field-validator type=“校验类型”>
<param name= “参数1 ” > 参数值1 </param>
<param name= “参数2 ” > 参数值2</param>
</field-validator>
</field>
</validators>
(ii)非字段校验格式如下:
<validators>
< validate type=“校验类型”>
<param name= “fieldName”>字段名称 </param>
<param name= “参数1 ” > 参数值1 </param>
<param name= “参数2 ” > 参数值2</param>
</field-validator>
</field>
</validators>
弊端:校验异常显示界面的地址栏是*.action,即实际上已经经过框架将用户请求转发到Action。
改进:使用客户端的输入校验,前面的校验规则文件不需要做改动,只要修改jsp视图代码即可。在jsp页面中定义
<s:form id= “id” action= “ ” validate= “true” >
注意增加了红色部分。该种方法实际上把字段校验内容转换成了JavaScript。
(5)Struts2框架的校验器
在xwork-2.0.4.jar中的com\opensymphony\xwork2\validator\validators\目录下的default.xml配置文件中定义了Struts框架内建的校验器。
包含:必填校验器,必填字符串校验器,整数校验器,浮点校验器,日期校验器,表达式校验器,字段表达式校验器,电子邮件校验器,网址校验器,复合类型校验器,类型转换校验器,字符串长度校验器。
注意:如果使用validators.xml配置文件,则系统默认的default.xml配置文件不会加载,所以需要将default.xml的内容复制到validators.xml配置文件中,否则不能使用系统内建的校验器。
(a)类型转换校验器
<validator type= “conversion” >
<param name= “fieldName”> 字段名称 </param>
//该参数指定当类型转换失败后,返回input页面时,表单是否保留原来的// 错误输入
<param name= “repopulateField”>true or false </param>
<message>类型转换错误</message>
</validator>
(b)日期校验器
<validator type= “date” >
<param name= “fieldName”> 字段名称 </param>
//要求日期的指定值在指定的范围内
<param name="min">1990-01-01</param>
<param name="max">2008-01-01</param>
<message>框架校验:生日日期错误!</message>
<message>生日必须在${min}到${max}之间</message>
</validator>
(c)浮点数值校验器
<validator type= “double” >
<param name= “fieldName”> 字段名称 </param>
//要求字段的指定值是否在所接受的指定的范围内
<param name= “minInclusive”>20.1 </param>
<param name= “maxInclusive”>50.1 </param>
<message>年龄必须在${minInclusive}到${maxInclusive}之间</message>
//要求字段的指定值是否在所排除的指定的范围内
<param name= “minExclusive”>0.789 </param>
<param name= “maxExclusive”>0.987</param>
<message>生日必须在${min}到${max}之间</message>
</validator>
(d)邮件地址校验器:检查指定字符串字符非空时,是否为一个合法的邮件地址
<validator type= “email” >
<param name= “fieldName”> 字段名称 </param>
<message>非法的邮件地址</message>
</validator>
(e)表达式校验器:是一个非字段校验器,若表达式返回为true,则校验通过,否则不通过。
<validator type= “expression” >
<param name= “expression”> 使用OGNL表达式,并基于值栈计算 </param>
<message>Failed to meet ongl Expression </message>
</validator>
(f)字段表达式校验器:要求指定字段满足一个逻辑表达式。
<validator type= “fieldexpression” >
<param name= “fieldName”> 字段名称 </param>
<param name= “expression”> 使用OGNL表达式,并基于值栈计算 </param>
<message> </message>
</validator>
(g)整数校验器
<validator type= “int”>
<param name= “fieldName”> 字段名称 </param>
//要求字段的整数值在指定的范围内
<param name= “min”>20 </param>
<param name= “max”>50 </param>
<message>年龄必须在${min}到${max}之间</message>
</validator>
(h)必填校验器:用于校验字段是否为空
<validator type= “required” >