Struts2的validate有基于编码和xml配置的两种方式实现,下面是我的一些学习总结,无论是采用那种方式,需要使用struts validate功能的类都要继承ActionSupport这个类,并且要在struts.xml文件中提供input视图:
1. 基于编码方式的实现
a)首先要在使用struts validate的Action类里,让它继承 ActionSupport这个类,然后override掉里面的validate方法。validate()方法会校验action中所有与execute方法签名相同的方法。当某个数据校验失败时,我们应该调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport ),如果系统的fieldErrors包含失败信息,struts2会将请求转发到名为input的result。在input视图中可以通过<s:fielderror/>显示失败信息。
b) 通过validateXxx()方法实现, validateXxx()只会校验action中方法名为Xxx的方法。其中Xxx的第一个字母要大写。当某个数据校验失败时,我们应该调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport ),如果系统的fieldErrors包含失败信息,struts2会将请求转发到名为input的result。在input视图中可以通过<s:fielderror/>显示失败信息。
2.基于XML方式的实现
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validators>
<field name="username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>用户名不能为空!</message>
</field-validator>
</field>
</validators>
ActionClassName
-validate.xml实现的validate和1.a)相同,会对
ActionClassName
的类所有方法进行校验;倘若只想对
ActionClassName
的类特定的方法校验,该xml文件可以这样命名
ActionClassName-action-validate.xml