`

struts2 验证框架

 
阅读更多

 


1. struts2 的验证框架的分类
     1.1 验证的分类:
           1.1.1 根据验证的场所分:
                    客户端校验 在提交服务器前的效验,javascript的效验
                    服务端校验 在Action处理之前进行效验
              1.1.2 在使用方式上分
                         使用覆盖validate方法校验
     XML配置文件配置
     Java Annotation配置

2. Struts 2 验证流程
          Struts 2 执行步骤:
               
          Struts 2 验证步骤:
               
    1. 类型转换器负责对字符串的请求参数执行类型转换,并将这些值设置成 Action 的属性值
    2. 在执行类型转换过程中可能出现异常,如果出现异常,将异常信息保存到 ActionContext 中,
          conversionError 拦截器负责将其封装到 fieldError 里,然后执行第 3 步;如果转换过程没有异常信息,则直接进入第 3 步。
    3. 调用 Struts 2 内置的输入校验规则进行输入校验 (也就是根据各种 *validation.xml 文件里定义的校验进行输入校验)
    4.  通过反 射调用 validateXxx() 方法,其中 Xxx 是即将处理用户请求的处理逻辑所对应的方法名。
    5. 调用 Action 类里的 validate() 方法
    6. 如果经过上面 5 步 都没有出现 FieldError ,将调用 Action 里处理用户请求的处理方法;
          如果出现了 FieldError,系统将转入 input 逻辑视图所指定的视图资源。
    

3. 使用覆盖validate方法校验
     ActionSupport实现了接口Validatable
     通过重写 ActionSupport 类的 validate() 方法进行校验
     如果某个Action类中有多个执行方法XXX,可以通过增加validateXXX()方法来实现验证
    

4. XML配置文件配置
     Xml配置文件与Action的关系为:
          SomeAction.java – SomeAction-validation.xml
且与SomeAction.class处在相同的目录中。

在使用params传值的情况适合该验证。

在使用modeldriver传值的时候,可以采用visitor效验器
Visitor 校验器主要用于校验 Action 里的复合属性。
例如:一个 SomeActionAction 里包含了 User 类型的属性,该校验器需要配置属性的validation.xml
eg:
     SomeAction-validation.xml
     User-validation.xml
缺点:
     多个xml文件,难于管理


5. Java Annotation配置
     5.1 拦截器配置
          <interceptor-ref name="validation">
               <param name="excludeMethods">input,back,cancel,browse</param>
               <param name="validateAnnotatedMethodOnly">true</param>
          </interceptor-ref>
 
     5.2 对于Action方法的效验方式
          eg:
          @Validations(
        requiredStrings = {
            @RequiredStringValidator(type = ValidatorType.SIMPLE, fieldName = "model.name", message = "产品名称是必须的."),
        }
    )
public String save(){        
        return SUCCESS;
}
备注:如果该action中其它方法不需要验证需要在方法上面加入:@SkipValidation 忽略验证
          eg:
               @SkipValidation
     public String toAdd(){
        return SUCCESS;
     }                    
          如果需要使用国际化只需在@RequiredStringValidator(type = ValidatorType.SIMPLE, fieldName = "model.name", key= "name.key")其它都遵循i18n的处理方式
     5.3 velocity模板展示提示信息方式
          采用s标签:
          输出所有的提示信息
          #sfielderror()
          输出字段model.name的提示信息
          #sfielderror("fieldName=model.name")
          
     5.4 自定义效验
          5.4.1 主要依赖于CustomValidator
          
          5.4.2 基本的使用:
               5.4.2.1 定义验证类型
                    eg:
                    package com.jd.vc.webapp.utils.validators;

import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;
/**
* Date: 13-2-20
* Time: 上午9:55
* To change this template use File | Settings | File Templates.
*/
public class NumberFieldValidator extends FieldValidatorSupport {
    public void validate(Object object) throws ValidationException {
        String fieldName = getFieldName();
        Object value = this.getFieldValue(fieldName, object);
        if (!(value instanceof String)) {
            return;
        }
        String str = ((String) value).trim();
        if (str.length() == 0) {
            return;
        }
        try {
            Double.parseDouble(str);
        } catch (NumberFormatException nfe) {
            addFieldError(fieldName, object);
            return;
        }
        try {
            Integer.parseInt(str);
        } catch (NumberFormatException nfe) {
            addFieldError(fieldName, object);
            return;
        }
    }
}
               
     5.4.2.2 加入验证框架
          加入validators.xml
          eg:
          <!DOCTYPE validators PUBLIC
        "-//OpenSymphony Group//XWork Validator Config 1.0//EN"
        "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
<validators>
    <validator name="numericField" class="com.jd.vc.webapp.utils.validators.NumberFieldValidator"/>
</validators>

     5.4.2.3 Action验证使用
          eg:
               @Validations(
        customValidators = {
            @CustomValidator(type ="numericField", fieldName = "model.weight", message = "请输入数字类型.")
        }
    )
     public String save(){        
          return SUCCESS;
     }
 
     5.4.2.4 velocity展示提示信息
          eg:
               输出字段model.weight的提示信息
                         #sfielderror("fieldName=model.weight")
 
参考地址:
annotation验证:
     http://www.tutorialspoint.com/struts_2/struts_annotations_types.htm
 

 

分享到:
评论

相关推荐

    struts2验证框架

    Struts2 验证框架详解 Struts2 验证框架是基于 Java 语言的 Web 应用程序框架,提供了一个强大的验证机制,以确保用户输入的数据满足业务逻辑的要求。在 Struts2 中,验证机制是通过 validator 来实现的,该机制...

    Struts2校验框架应用

    Struts2校验框架应用

    struts2校验框架

    struts2校验框架 struts2校验框架 struts2校验框架 struts2校验框架

    struts2校验框架使用心得.txt

    struts2校验框架使用心得 希望对初学者有所帮助

    struts2验证框架示例

    struts2的验证框架的示例代码,快速学习和使用struts2验证框架

    struts2验证框架简单示例

    适合初学者 struts2验证框架简单示例

    struts2验证框架简单实例

    struts2 验证框架实例 掩饰了整个验证的过程 并讲解了一些网上没有说过的可能会遇到的错误

    struts2验证框架参数

    struts2验证框架的一些属性和框架验证的语法

    struts2 校验框架

    source 博文链接:https://callan.iteye.com/blog/185577

    Struts2验证框架的配置及validation.xml常用的验证规则

    Struts2验证框架的配置及validation.xml常用的验证规则

    Struts2 校验框架学习笔记

    Struts2 和Struts1同样也提供了校验框架,但在Struts2 已经不再把校验框架做为一个插件,而是已经内置到了Struts2中,而且配置起来更为简单方便,功能也更强大。

    使用Struts2校验框架完成输入校验

    2、用户名只能使用数字或者字母,长度为6~20之间; 3、密码、确认密码必须是数字和字母,长度为6~20之间; 4、密码、确认密码必须相同; 5、收入必须在0.001~10000.000之间; 6、年龄必须是整数且必须在0~120...

    Struts 2校验框架的应用

    (2):对密码校验的规则是用户不能为空,且只能是数字,长度为8到20之间。 (3):年龄的校验规则是必须是整数,且在1到120之间。 (4):生日的校验规则是必须在1950-1-1到1990-1-1之间。 (5):所有提示信息均要...

    struts1验证框架相当好的经典例子

    在Struts1中,验证框架是处理用户输入数据校验的重要组成部分,它帮助开发者确保用户提交的数据符合预定义的规则,从而提高应用程序的安全性和用户体验。下面将详细介绍Struts1验证框架的使用。 首先,我们来看一下...

Global site tag (gtag.js) - Google Analytics