Struts2验证框架 Struts2Validator

Action配置中一定要设置input返回页面

添加验证只要创建验证的xml文件

1.创建xml文件名

验证Action中全部方法

在Action同包下,创建:Action类名-validation.xml
如:ValidateAction创建ValidateAction-validation.xml

验证Action中单个方法









注意事项

注意:
1.要验证的方法不能叫input.
2.这样配置在form表单中要在中action写好名称,
不能写action="validate_",然后 
这样会找不到对应的配置文件,跳过验证.
3.如果验证出错,返回input页面时,那些存在ValueStack中的值会丢失,可以将Action实现Preparable接口,
然后prepare()方法里初始化添加页面需要的值.
4.如果使用Preparable接口,必须在action配置中添加.
这样prepare()才能得到form提交的参数.

2.创建xml内容


更改为:
  
	
	
    
    	
    	
    	
            true
            Please enter a mail
        
    	
    		
    			Invalid MAIL
    		
    	
    

Struts内建验证程序(type的值)

required

保证字段的值不是空值null.空字符串不是空值null.


    
        Please enter a user name
    

requiredstring

保证字段不是空值null,也不是空白(empty).
param:trim(boolean) ->true->去除前后空格


    
        true
        Please enter a user name
    


    
        false
        Please enter a password
    

int

验证字段值是否可以转换为一个整数.
param: min(int);max(int)

 
	
	    1999
	     2010
	    year:1999-2010
	

date

验证给定日期字段的值是否在一个给定的范围内.
param:max(date);min(date)

 
	
	    
	    1999-01-01
	     2010-01-01
	    birthday:1999-2010
	

email

给定的String值是否是一个电子邮件地址


    
        Invalid email
    

url

给定的String值是否是一个合法的URL(要有前缀)


    
        Invalid URL
    

expression,fieldexpression

验证给定字段是否满足一个OGNL表达式.
区别:expression 不是一个字段验证程序,失败时将生成一个动作错误.(JSP中调用

才显示出错信息)
fieldexpression 是一个字段验证程序,失败时将抛出一个字段错误.(对字段验证)
param:expression(String)OGNL表达式

expression:

public class ExpressionTestAction {
	//属性生成get,set
    private int min;
    private int max;
}

    
        max > min
    
    
        Maximum temperature must be greater than Minimum temperature
    



fieldexpression:

public class FieldExpressionTestAction {
	//属性生成get,set
    private int min;
    private int max;
}


    
        
            max > min
        
        
            Maximum temperature must be greater than Minimum temperature
        
    

visitor

把同一个验证程序配置文件用于多个动作(对一个Bean写验证文件,每个使用的Action只要引用)

//UserBean
public class UserBean {
	//属性get,set
	private String name;
	private int age;
}

//UserBean-validation.xml(和UserBean放在同一个包中)

    
        用户名必须
    


    
        18
        99
        Age must be between 18 and 99
    


//Action的validation.xml


    
    	
        用户: 
    

如果另一个Action对UserBean使用另一个标准的验证,可以创建新的验证文件

//UserBean-specific-validation.xml


    
        30
        50
        Age must be between 30 and 50
    

//另一个Action的validation.xml

    
    	
    	specific
        用户1: 
    

conversion

检查对某个属性进行类型转换是否会导致一个转换错误


    
        
            An age must be an integer.
        
    

stringlength

验证一个非空的字段值是不是足够的长度
param:minLength(int);maxLength(int);trim(boolean)

 
	
	    6
	     14
	    length:6-14
	

regex

给定的值是否与一个给定的正则表达式匹配
param:expression(String)正则表达式;caseSensitive(boolean)是否区别大小写,默认为true;trim(boolean)是否去除前后空格


    
        
            
        
        
            Invalid phone number or invalid format
        
    

3.在action中验证

利用Validateable接口实现验证,实现void validate()方法.
ActionSupport类已经实现了这个接口

//继承ActionSupport
public class User extends ActionSupport {
    //属性get,set
    private String userName;
    private String password;
    private static List userNames = new ArrayList();
    static {
        userNames.add("harry");
        userNames.add("sally");
    }
    //验证方法
    public void validate() {
        if (userNames.contains(userName)) {
			//添加出错信息
            addFieldError("userName",  "'" + userName + "' has been taken.");
        }
    }
}

4.自定义验证类

要创建一个普通的验证程序(非字段验证程序),扩展ValidatorSupport类.验证失败要从validate方法调用addActionError方法.
要创建一个字段验证程序,扩展FieldValidatorSupport类.验证失败要从validate方法调用addFieldError方法.
如果要能接受参数,要在类中定义一个相应的属性,并生成get,set.

编写类

public class StrongPasswordValidator extends FieldValidatorSupport {
	//属性
    private int minLength = -1;
    public void setMinLength(int minLength) {
        this.minLength = minLength;
    }
    public int getMinLength() {
        return minLength;
    }
	//验证方法
    public void validate(Object object) throws ValidationException {
        String fieldName = getFieldName();
        String value = (String) getFieldValue(fieldName, object);
        if (value == null || value.length() <= 0) {
            // use a required validator for these
            return;
        }
        if ((minLength > -1) && (value.length() < minLength)) {
            addFieldError(fieldName, object);
        } else if (!isPasswordStrong(value)) {
            addFieldError(fieldName, object);
        }
    }
    
    private static final String GROUP_1 = "abcdefghijklmnopqrstuvwxyz";
    private static final String GROUP_2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    private static final String GROUP_3 = "0123456789";
    protected boolean isPasswordStrong(String password) {
        boolean ok1 = false;
        boolean ok2 = false;
        boolean ok3 = false;
        int length = password.length();
        for (int i = 0; i < length; i++) {
            if (ok1 && ok2 && ok3) {
                break;
            }
            String character = password.substring(i, i + 1);
            System.out.println("character:" + character);
            if (GROUP_1.contains(character)) {
                ok1 = true;
                continue;
            }
            if (GROUP_2.contains(character)) {
                ok2 = true;
                continue;
            }
            if (GROUP_3.contains(character)) {
                ok3 = true;
            }
        }
        return (ok1 && ok2 && ok3);
    }    
}

注册xml

在src下创建validators.xml





	
    

使用验证


    
        8
        
            Password must be at least 8 characters long
            and contains at least one lower case character,
            one upper case character, and a digit.
        
    

你可能感兴趣的:(Java基础,java,EE,工具配置,struts2入门,Struts2验证框架,框架入门,struts2)