文章来源:http://blog.csdn.net/yuyuyuyuy/article/details/6240081
服务器端校验的重要性,我就不在这里浪费口舌了。
从理论上讲,execute()方法完全可以完成任何的校验任务。但大多数情况下,并不这样做,而是使execute()方法专司其职。因在程序设计时,尽量使每个方法完成单一的任务。
1、 Struts2手动完成输入校验
a、重写validate()方法
通过继承ActionSupport类,重写validate()方法(专门用来校验的)完成输入校验.struts2框架会在调用Action类的execute()和其它方法之前调用该类的validate()方法
Eg:在一个Action类中有
private validate(){
if(name == null){
addFieldError(“name”,”用户名不能为空”);//错误信息默认显示在对应文本框上方,可以在jsp文件中定义<s:fielderror>标签接受,若有addFieldError方法,不再执行execute(),返回input逻辑视图
}
}
b、重写validateXxx()方法
validateXxx()方法在相应的Xxx()方法前运行,注意若某个Action中同时有validate()和validateXxx()方法时,处理Xxx()逻辑前先运行validate()方法,没fielderror时再执行validateXxx()检错
2、错误信息在指定位置显示
错误信息会在struts标签相应文本域上显示,但struts标签排版不是很美观,若不用他怎么显示错误信息呢?eg:用一下方法输出
<form action="mixValid.action" method=post>
${errors.username[0]}
用户名: <input name="username" value="beansoft" >
...
</form>
其中${errors.username[0]}可以显示username的值的错误校验信息。
校验错误信息是以 Map 的方式存放在ValueStack中的。
Map中的
key: errors
value: {username=[用户不能为空], 属性名=[校验错误信息]...}
所以可以使用上面的方法显示错误校验信息,避免使用Struts标签。
如果是<input name="user.name"/>这样的标签,显示错误信息的方式不是${errors.user.name[0]}
而是${errors["user.name"][0]}
3、 struts2内置校验器
Struts2已经为我们准备了一些内建校验器,我们可以直接使用它们, 在default.xml文件中,我们可以看到Struts2的内建校验器。
要使用struts2内置校验器就得配置校验文件,配置文件名称为<ActionName>-validation.xml
Eg:字段校验器配置
<?xml ···?>
<!DOC ··· ”.dtd”>
<validators> <!-- 校验器根元素 -->
<field name="name"> <!-- 指定属性name(被校验的字段) -->
<field-validator type="requiredstring"> <!-- 定义校验类型为必填字符串-->
<message>姓名不能为空</message> <!--校验失败输出信息,默认在对应文本框上输出-->
</field-validator>
</field> <!-- 基本元素-->
</validators>
Eg:非字段校验器配置
<?xml ···?>
<!DOC ··· ”.dtd”>
<validators> <!-- 校验器根元素 -->
<validator type = “校验器类型名”><!--基本元素-->
<param name = “fieldName”>需要被校验的字段</ param >
<param name = “参数名”>参数值</ param ><!--区别-->
<message key = “I18Nkey”>校验失败提示信息</message><!--key用来指定国际化信息对应的key-->
</validator>
</validators>
3、常用的内置校验器有:
1,required 必填校验器,要求字段必须有值
2,stringlength字符串长度校验器
3,int 整数校验器,
4,date 日期校验器
5,expression 表达式校验器,它是一个非字段校验器,当参数expression计算的值为true时,校验通过,否则返回提示。
6,fieldexpression 字段表达式校验器,当参数expression计算的值为true时,校验通过,否则返回提示。它和5一样多用于在用户的两次输入中间进行判断,如下例:
<!-- 要校验的属性为rpass -->
<field name="rpass">
<!-- 使用fieldexpression校验器 -->
<field-validator type="fieldexpression">
<param name="expression"><![CDATA[(rpass == password)]]></param>
<message>两次密码不相同!</message>
</field-validator>
</field>
7,email 邮件地址校验器,要求被检查的字段如果非空,则必须是合法的邮件地址。
8,url 网址校验器,要求被检查的字段如果非空,则必须是合法的URL地址。7和8都是基于正则表达式来计算的,可能会随着技术的进步而不同,用户可以自己扩展。
9,conversion转换校验器,检测某个字段是否发生过转换错误
10,regex正则表达式校验器
他有3个参数,fieldname要检验的字段expression正则表达式、caseSensitive布尔值(大小写敏感与否)
4、自定义校验器
开发自己的校验器。方法如下:添加一个validators.xml文件,validators.xml文件中的配置则同刚才说的Struts2的内建校验器的配置相同。再开发出自己的校验器类,在validators.xml中注册就可以了。如果添加了validators.xml文件,则Struts2不会再应用默认的校验器,因此这时需要将default.xml文件中的所有校验器都复制到validators.xml文件中。
怎么写自己开发的校验器类,请自己参考网上资料。