在struts2中可以对action中的所有方法实现校验,也可以针对指定方法进行校验。
Struts2中实现上述的校验又可以分为手动编写代码实现和配置xml文件方法
手动编写代码校验
a.对所有和execute方法签名相同的方法进行校验
通过重写validate() 方法实现
validate()方法会校验action中所有与execute方法签名相同的方法。当某个数据校验失败时,我们应该调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport),如果系统的fieldErrors包含失败信息,struts2会将请求转发到名为input的result--此result用于返回到用户输入界面。在input视图中可以通过<s:fielderror/>显示失败信息。
Validate例子:
public void validate() {
// TODOAuto-generated method stub
// 输入校验
if (userName == null || "".equals(userName) || userName.length()< 5) {
this.addFieldError(userName, "用户名不能为空或长度不足5位!");
}
if (email == null || "".equals(email) || email.indexOf("@") < 1
|| email.lastIndexOf(".") < 2
|| email.indexOf("@") > email.lastIndexOf(".")) {
this.addFieldError(email, "邮箱格式不正确!");
}
// 创建正则表达式格式编译
Patternper = Pattern.compile("^1[358][0-9]{9}$");
// 返回是否匹配成功
boolean isok = per.matcher(mobile).matches();
if (!isok) {
this.addFieldError(mobile, "手机号码格式不正确!");
}
super.validate();
}
验证失败后,请求转发至input视图:
<resultname="input">/WEB-INF/page/addUser.jsp</result>
在addUser.jsp页面中使用<s:fielderror/>显示失败信息。
前提是要先在jsp页面头部引入struts标签
<%@ taglib uri="/struts-tags"prefix="s" %>
b.对action指定方法输入校验
通过validateXxx()方法实现, validateXxx()只会校验action中方法名为Xxx的方法。其中Xxx的第一个字母要大写。当某个数据校验失败时,我们应该调用addFieldError()方法往系统的fieldErrors添加校验失败信息(为了使用addFieldError()方法,action可以继承ActionSupport ),如果系统的fieldErrors包含失败信息,struts2会将请求转发到名为input的result。在input视图中可以通过<s:fielderror/>显示失败信息。
如果action中有个login(方法需要小写)的方法,校验的时候只需要对login()方法进行校验,则可以定义validateLogin()方法填写响应的校验代码
在上面的例子中如果是只对登录进行校验就可以将validate()方法的名字改为validateLogin()就可以了其他的都不需要改变了
xml配置校验
a. xml配置对所有方法进行校验
使用基于XML配置方式实现输入校验时,Action也需要继承ActionSupport,并且提供校验文件,校验文件和action类放在同一个包下,文件的取名格式为:ActionClassName-validation.xml。
其中ActionClassName为action的简单类名,-validation为固定写法。如果Action类为action.UserAction,那么该文件的取名应为:UserAction-validation.xml。
下面是校验文件的模版:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC"-//OpenSymphony Group//XWork Validator1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validators>
各种校验器
</validators>
regex:正则表达式校验器 在xml中的正则需要使用<![CDATA[正则表达式]]>包含
<field name="mobile"> name为需要校验的字段属性
<field-validator type="regex"> type表示校验的类型
<param name="expression"><![CDATA[^1[358][0-9]{9}$]]></param>
<message>手机格式不正确!</message> //保存错误的信息
</field-validator>
</field>
email:邮件地址校验器
<field name="email"> name为需要校验的字段属性
<field-validator type="email">
<message>email格式不正确!</message>
</field-validator>
</field>
b.Xml配置对指定方法进行校验
当校验文件的取名为ActionClassName-validation.xml时,会对 action中的所有处理方法实施输入验证。如果你只需要对action中的某个action方法实施校验,那么,校验文件的取名应为:ActionClassName-ActionName-validation.xml,其中ActionName为struts.xml中action的名称
总结:这和上面的xml配置校验所有的方法很类似,xml文件也是创建在校验类的包中只是xml文件的名字去的和action中需要校验的方法有关而已,比如在struts.xml中有
<actionname="user_*" class="action.UserAction" method="{1}“ >
<resultname="success">/message.jsp</result>
<result name="input">/addUser.jsp</result>
</action>
UserAction中有以下两个处理方法:
public String add()throws Exception{
}
public String update()throws Exception{
}
要对add()方法实施验证,校验文件的取名为: UserAction-user_add-validation.xml
要对update()方法实施验证,校验文件的取名为: UserAction-user_update-validation.xml