xml配置方式
使用xml配置文件实现检验时,也分为对action所有方法进行校验和对action中特定方法进行校验。
一、对action所有方法进行校验
在要实现校验的类的同级目录下,新建配置文件ActionClassName-validation.xml文件,其中ActionClassName为action的class名称,表示对action中所有方法进行校验。LoginService-validation.xml配置代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<field name="username">
<field-validator type="requiredstring">
<message>XML配置:用户名不能为空!</message>
</field-validator>
</field>
</validators>
LoginService中屏蔽基于手工编写方式的代码,代码如下:
package com.struts.service;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
import com.struts.controller.Login;
@SuppressWarnings("serial")
public class LoginService extends ActionSupport{
private Login login;
public Login getLogin() {
return login;
}
public void setLogin(Login login) {
this.login = login;
}
/* *//**
* 对前台传递的数值进行校验
*//*
@Override
public void validate(){
if(this.login.getUsername() == null ||"".equals(login.getUsername())){
this.addFieldError("username", "用户名不能为空!");
}
}
//对指定方法进行校验
public void validateLogin(){
if(this.login.getUsername() == null ||"".equals(login.getUsername())){
this.addFieldError("username", "特定方法校验:用户名不能为空!");
}
}*/
public String execute(){
if(login!=null){
System.out.println(login.getUsername());
System.out.println(login.getPassword());
System.out.println(login.getBirthday());
}
return Action.SUCCESS;
}
public String login(){
return Action.SUCCESS;
}
}
二、对action中特定方法进行校验
在要实现校验的类的同级目录下,新建配置文件ActionClassName-ActionMethodName-validation.xml文件,其中ActionClassName为action的class名称,ActionMethodName为Action中需要校验的方法的名称。LoginService-login-validation.xml的配置内容和LoginService-validation.xml的内容一样,只是提示语句不一样,但是在程序运行后,发现页面上的提示仍然是LoginService-validation.xml的提示。我们使用标签<s:fielderror/>
取得所有的错误信息,错误信息如下图所示:
点击Debug信息发现,两个校验方法均执行了:
三、基于xml配置的校验顺序
由上述例子可以看出,当出现所有方法和特定方法的xml配置时,校验顺序和基于手工编写的校验器执行顺序不一致,如下:
首先需找ActionClassName-validation.xml的配置文件进行校验,然后,寻找ActionClassName-ActionMethodName-validation.xml的配置文件进行校验。如果,Action类继承另外一个Action类,则先进行父类的规则校验,然后进行子类的规则校验。
四、常用的校验器
required 必填校验器,要求field值不能为null
requiredstring 必填字符串校验器,要求field值不能为null,并且长度大于0,默认情况下会对字符串trim()操作
stringlength 字符串长度校验器,要求field属性值的长度必须在某个范围内,minLength:最小长度,maxLength:最大长度,trim参数指定校验之前是否去除空格
int整数校验器,要求field值必须在指定范围内,min:指定最小值,max:指定最大值
duble双精度校验器,要求field值必须在指定范围内,min:指定最小值,max:指定最大值
fieldexpression 字段的OGNL表达式校验器,要求field满足一个ognl表达式,express参数指定ognl表达式,表达式基于ValueSatck进行取值,为true时表示通过
email 邮件表达式,要求如果field值非空,且是有效的邮箱
url 网址校验器,要求如果field值非空,则必须是合法地url地址。
date日期校验器,要求field值必须在指定范围内,min:指定最小值,max:指定最大值
converslon转化校验器,指定在类型转换失败时,提示的错误信息
visitor 校验action中的复合属性
regex正则匹配校验器,express参数为正则表达式,caseSensitive:是否区分大小写,默认为true