博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
过滤器、监听器、拦截器的区别
阅读量:4565 次
发布时间:2019-06-08

本文共 7876 字,大约阅读时间需要 26 分钟。

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中调用<s:actionerror/>才显示出错信息)
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.        
   

转载于:https://www.cnblogs.com/UnlimitedSunlight/p/3482768.html

你可能感兴趣的文章
抽象类和接口
查看>>
使用ASP.NET Atlas AutoComplete Behavior或AutoComplete Extender实现自动完成功能(下)
查看>>
golang 常见疑惑总结
查看>>
8大你不得不知的Android调试工具
查看>>
pc端元素拖拽
查看>>
Sublime Text3使用Package Control 报错There Are No Packages Available For Installation
查看>>
判断连通图是否有环(并查集)
查看>>
汽车之家面试题2016
查看>>
POJ-数据结构-优先队列模板
查看>>
【HAOI2006】旅行(并查集暴力)
查看>>
css实现文本超出部分省略号显示
查看>>
留言板
查看>>
vue-router组件状态刷新消失的问题
查看>>
Android UI开发第十四篇——可以移动的悬浮框
查看>>
java8的一些用法
查看>>
(十)Hive分析窗口函数(二) NTILE,ROW_NUMBER,RANK,DENSE_RANK
查看>>
2018-11-19站立会议内容
查看>>
STM32 通用定时器相关寄存器
查看>>
【题解】1621. 未命名
查看>>
字符串加密算法
查看>>