zoukankan      html  css  js  c++  java
  • struts中的数据校验

    1.struts中如何进行数据校验

      在每一个Action类中,数据校验一般都写在业务方法中,比如login()、register()等。struts提供了数据校验功能。每个继承自ActionSupport的Action类都可以实现一个validate()方法。struts使用拦截器org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor进行数据校验,根据拦截器的执行流程,它会在执行Action的业务方法之前调用intercecpt()方法,因此可以完成数据校验的功能。

      在ActionSupport类中有一个ValidationAwareSupport的对象,该对象维护了一个Map<String, List<String>> fieldErrors属性,用它来存储错误信息。在Action类的业务方法中调用

    super.addFieldError("user","用户名必须填写!");

    会执行ActionSupport中的

        public void addFieldError(String fieldName, String errorMessage) {
            this.validationAware.addFieldError(fieldName, errorMessage);
        }

    ValidationAwareSupport类中的addFieldError如下:

        public synchronized void addFieldError(String fieldName, String errorMessage) {
            Map errors = this.internalGetFieldErrors();
            Object thisFieldErrors = (List)errors.get(fieldName);
            if(thisFieldErrors == null) {
                thisFieldErrors = new ArrayList();
                errors.put(fieldName, thisFieldErrors);
            }
    
            ((List)thisFieldErrors).add(errorMessage);
        }

    该方法将一条错误信息添加到Map中,一个key值可以对应多条错误信息。

    2.struts中数据验证的方法

    • 代码方式验证Action中指定的方法(validate+要验证的方法名作为验证函数名)

      在Action类中重写validate()方法。

        //仅验证register方法
        public void validateRegister(){
            if(user.getUserName() == null||"".equals(user.getUserName()))
            {
                //保存错误信息
                super.addFieldError("user","用户名必须填写!");
            }
    
            if(user.getPassword() == null||"".equals(user.getPassword()))
            {
                //保存错误信息
                super.addFieldError("user","密码必须填写!");
            }
        }
    • 代码方式验证Action中的所有方法(直接重写validate()方法)

    • XML方式验证Action中指定的方法(xml命名为ActionClassName-ActionName-validation.xml)

    • XML方式验证Action中的所有方法(xml命名为ActionClassName-validation.xml)

      使用validate()方法进行验证,涉及很多重复的验证逻辑,例如:非空验证、数值验证、email验证、日期验证等。因此struts对于常用的验证进行了封装,提供了验证器。

      struts提供的验证器在xwork-core-2.3.4.1.jar!comopensymphonyxwork2validatorvalidatorsdefault.xml中,共16个,如下:

    <validators>
        <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
        <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
        <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
        <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
        <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
        <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
        <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
        <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
        <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
        <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
        <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
        <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
        <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
        <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
        <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
        <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
    </validators>

      xml文件名称语法:ActionClassName-validation.xml,而且需要与当前要验证的action 在同一目录。(和局部转换器相似)

      使用xwork-core-2.3.4.1.jar!xwork-validator-1.0.dtd约束来写xml文件。

    <?xml version="1.0" encoding="utf-8" ?>
    <!DOCTYPE validators PUBLIC
            "-//Apache Struts//XWork Validator 1.0.2//EN"
            "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
    <validators>
        <field name="user.userName">
            <field-validator type="requiredstring">
                <message>用户名必须填写!</message>
            </field-validator>
        </field>
        <field name="user.password">
            <field-validator type="requiredstring">
                <message>密码必须填写!</message>
            </field-validator>
            <field-validator type="stringlength">
                <param name="minLength">6</param>
                <message>密码长度不能小于6!</message>
            </field-validator>
        </field>
        <field name="user.birth">
            <field-validator type="date">
                <message></message>
            </field-validator>
        </field>
    </validators>
  • 相关阅读:
    activiti串行会签的使用
    Linux中shell字符串分隔、字符串替换、字符串拼接
    spring 通过启动命令配置文件路径
    流程activiti的组和用户的使用
    使用activiti的designer插件记录
    windows下vue+webpack前端开发环境搭建及nginx部署
    node.js的安装
    开启我的博客之旅
    Docker 命令集合
    github免费搭建个人博客,拥有免费域名
  • 原文地址:https://www.cnblogs.com/juaner767/p/5553881.html
Copyright © 2011-2022 走看看